要使用Spring的注解,必须在XML文件中配置有属性,告诉人家你要使用注解,Spring容器才会去加载类上的注解:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <context:annotation-config /> </beans>
@Resource注解:
作用:自动装配属性值
位置:属性的setter方法上
example:
public class UserService { private UserDao userDao; public User get() { return userDao.get(); } public UserDao getUserDao() { return userDao; } @Resource(name="userDao") public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
被Resource注解标记的setter方法,Spring容器就会帮你自动装配,这个注解有一个name属性,设置的就是你的要注入那个bean的名字,若你没有填写这个name属性,Spring将自动帮你处理,用方法名去掉set去查找这个bean或者参数名去查找,这也说明了Resource注解是遵循by-name语法的
@PreConstruct和@PreDestroy
解释:@PreConstruct对应bean的初始化方法,@PreDestroy对应bean的销毁方法
作用:通过这两个注解可以让我们很好的观察着bean的声明周期情况
位置:放在对应的方法上
public class UserService { @PostConstruct public void init() { System.out.println("UserService is initing"); } @PreDestroy public void destroy() { System.out.println("UserService is destroying"); } ...... }
@Component和它同类型注解
作用:这个注解最大的作用就是自动检测组件,也就是代替了XML中对bean的配置,和它有着相同作用的注解还有@Service、@Repository、@Controller,这些注解在现在还没有什么明显的区别,但是在以后可能在MVC模式上有着很大的不同,可能对应着不同的层,这些纯属个人的猜测。
位置:bean类上
提醒:在使用这个注解的时候,还要在XML上配置扫描的属性,告诉人家你的bean在那些包上
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <context:annotation-config /> <context:component-scan base-package="com.xujianguo" /> </beans>
example:
@Component public class UserService { //代码 }
其实这个Component注解也是有个name属性的,跟XML中定义bean的id一样,如果你有天就按照name的值来,如果没有的话就按照开头小写的非限定类名作为bean的id