3.IOC的配置与应用(annotation的方式)
自动装载
@Autowired
1 public class UserService { 2 3 private UserDAO userDAO; 4 public UserDAO getUserDAO() { 5 return userDAO; 6 } 7 8 // 默认按照 bean 的类型注入 (by type) 9 // 如果想用 byName 使用 @Qulifier 10 // 注解最好放到 set方法上,不要放到字段上(第三种注入形式),会破坏封装性,类似 hibernate 11 @Autowired 12 public void setUserDAO(@Qualifier("u") UserDAO userDAO) { 13 this.userDAO = userDAO; 14 } 15 16 public void add(User user) { 17 userDAO.save(user); 18 } 19 }
@Resource(重要)
1 public class UserService { 2 3 private UserDAO userDAO; 4 public UserDAO getUserDAO() { 5 return userDAO; 6 } 7 8 /* 默认按名称,名称找不到,按类型( 如果@Resource中没有指定名称,那么默认使用userDAO) 9 * 当不存在 对应名称的 bean对象时,则按 类型 再找一遍,满足UserDAO.class 就算符合 10 * 加上name 属性 代表 按名称去找(一般都加上 name) 11 * 推荐使用 12 * annotation不足:如果没有源码,就无法运用annotation,只能使用xml 13 * */ 14 @Resource(name="userDAO") 15 public void setUserDAO(UserDAO userDAO) { 16 this.userDAO = userDAO; 17 } 18 19 public void add(User user) { 20 userDAO.save(user); 21 } 22 }
@Component @Service @Controller @Repository(取代 bean 标签,上面用于取代 property标签)
初始化的名字默认为类名首字母小写
可以指定初始化bean的名字
@Scope
/*@Scope 用来指定 bean 的 作用范围,就是之前 xml文件中 scope 属性的作用
* 默认 为 单例 ,singleton 可以指定为prototype
* */
@Scope("singleton")
@PostConstruct = init-method; @PreDestroy = destroy-method
1 /*相当于 xml 中 的 init-method*/ 2 @PostConstruct 3 public void postConstruct() { 4 System.out.println("init!!"); 5 } 6 7 /*相当于 xml 中 的 destroy-method*/ 8 @PreDestroy 9 public void preDestroy() { 10 System.out.println("destroy!!"); 11 }