Spring2.5之Annotation学习2

 

三、   @Resource( 重要、推荐)

还是需要在 xml 文件中配置 bean

(一)  JSR-250

JCP: Java Community Process 是由多个厂家出人来构成的 J2EE 组织,主要是用于定 Java 的一些新的标准

而每一个标签都可以称之为一个 JSR

而每一个新的 JSR 都会加一个数字是区别什么 JSR ,可以到官方网看看具体 JSR 定了哪些新的标准。

(二)  @Resource

代码:


import javax.annotation.Resource;

public class UserService { 

    private UserDao userDao = new UserDaoImpl ();

    public UserDao getUserDao() {

        return userDao ;

    }  

    // 在这里引用了一个资源,这个资源的名称和这个 setter 方法后面的成员属性名称一致 (userDao)

    // 注意这个 @Resource 是 J2EE 的 (import javax.annotation.Resource)

    @Resource

    public void setUserDao(UserDao userDao) {

        this . userDao = userDao;

    }

    public void add(User u){ userDao .save(u);}

} 
 

说明: 在这里引用了一个资源,这个资源的名称和这个 setter 方法后面的成员属性名称一致 (userDao)

注意这个 @Resource J2EE (import javax.annotation.Resource)

    @Resource 默认是根据 byName 来的,如果没有找到相同的名称再根据 byTyp e ,当然也可以指定 bean name 如下:

  

@Resource (name= "u2" )

    public void setUserDao(UserDao userDao) {

        this . userDao = userDao;

    } 
 

 

注意 一般使用 @Resource 而不会使用 @Autowired

 

不足:如果没有源码,就无法使用 annotation ,只能使用 xml

 

四、   @Componet

以上使用 @Autowired @Resource 注解时,还是需要在 xml 文件配置 bean ,这样就达不到完全使用 annotation 进行注解。因此现在引用 @Component 在那个 bean 前进行注解,表示那个类是需要的 bean

有了 @Componet 注解,这样就不需要在 xml 文件中配置 bean 了。

注意: @Componet Spring 的注解 ( org.springframework.stereotype.Component; )

 

例如:

   

  前缀部分见上面代码,以此略。。。

    < context:annotation-config />

    < context:component-scan base-package = "com.wjt276" />  

</ beans ><!— 不需要配置 bean 了 --> 
 

 

bean 类中需要使用 @Componet (或 @Service @Repository @Controller )注解这个类是 bean

 

代码:


import javax.annotation.Resource;

import org.springframework.stereotype.Component;

//  @Componet 注解默认 bean 的名称是类名首字母小写

// 也可以利用 value 属性指定 bean 的名称

@Component (value= "userService" )

public class UserService { 

    private UserDao userDao = new UserDaoImpl();

    public UserDao getUserDao() { return userDao ;}

    // 在这里引用了一个资源,这个资源的名称和这个 setter 方法后面的成员属性名称一致 (userDao)

    // 注意这个 @Resource 是 J2EE 的 (import javax.annotation.Resource)

    @Resource

    public void setUserDao(UserDao userDao) { this . userDao = userDao;}

    public void add(User u){ userDao .save(u);}} 
 

注意: @Componet 注解,默认 bean 的名称是类的首字母小写,当然也可以利用 value 属性指定 bean 名称(在 annotation 中属性为 value 可以不写,直接写值)

         一般建议 @Componet 注解后面都指定名称。

 

说明: Spring 在加载配置文件时, 发现有 < context:component-scan base-package = "com.wjt276" /> 标签, 并且后面的 base-package 属性指定了包名 ,就会在这个指定的包名下面搜索灰,看哪个类用 @Componet 进行了注解,如果有 Spring 就将其初始化到容器中,认为是一个 bean

 

五、   @Scope @PostConstruct@PreDestroy

@Scope 对应于 xml 配置文件的 scope 属性

@PostConstruct 对应于 xml 配置文件中的 init-method 属性

@PreDestroy 对于应于 xml 配置文件中的 destroy-method 属性

例如如下:


import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

@Component (value= "userService" )

@Scope ( "singleton" )

public class UserService {

    @PostConstruct

    public void init(){System. out .println( " 现在开始初始化 UserService" );}

    private UserDao userDao = new UserDaoImpl();

    public UserDao getUserDao() { return userDao ;}

    @Resource

    public void setUserDao(UserDao userDao) { this . userDao = userDao;}

    public void add(User u){ userDao .save(u);}

    @PreDestroy

    public void destroy(){System. out .println( "destory" ); } 
  

 

六、   注解对应的jar

 

1 @Autowired           org.springframework.beans.factory.annotation.Autowired;

2 @Qualifier             org.springframework.beans.factory.annotation.Qualifier;

3 @Componet           org.springframework.stereotype.Component;

4 @Resource             javax.annotation.Resource;

5 @Scope                  org.springframework.context.annotation.Scope;

6 @PostConstruct     javax.annotation.PreDestroy;

7 @PreDestroy          javax.annotation.PreDestroy;

 

你可能感兴趣的:(spring,bean,xml)