Spring注解:@Resource、@PreConstruct、@PreDestroy、@Component

要使用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

posted on 2013-12-13 16:54  进击的Ray_xujianguo  阅读(674)  评论(0编辑  收藏  举报

导航