spring2.5 学习笔记 第16页 共46页
destroy-method=\>
一、 开始使用annotation配置Spring
首先需要在spring的xml配置文件中加入下列红色加粗部分的代码。
1、AutowiredAnnotationBeanPostProcessor, 2、CommonAnnotationBeanPostProcessor, 3、PersistenceAnnotationBeanPostProcessor, 4、RequiredAnnotationBeanPostProcessor spring2.5 学习笔记 第17页 共46页
二、 @Autowired、@Qualifier
还是需要在xml文件中配置bean
(一) @Autowired
位置:可以放在成员属性前面,也可以放在getter或setter方法前面,但是建议放在setter方法前面 作用:表示该对应的成员属性可以完成自动配置功能(默认是根据byType的) 例如: xmp配置文件: 前缀部分见上面代码,以此略。。。
三、 @Resource(重要、推荐)
还是需要在xml文件中配置bean
(一) JSR-250
JCP:Java Community Process是由多个厂家出人来构成的J2EE组织,主要是用于定Java的一些新的标准 而每一个标签都可以称之为一个JSR
而每一个新的JSR都会加一个数字是区别什么JSR,可以到官方网看看具体JSR定了哪些新的标准。
(二) @Resource 代码: import javax.annotation.Resource; public class UserService { } 说明:在这里引用了一个资源,这个资源的名称和这个setter方法后面的成员属性名称一致(userDao) 注意这个@Resource是J2EE的(import javax.annotation.Resource) @Resource默认是根据byName来的,如果没有找到相同的名称再根据byType,当然也可以指定bean的name如下: @Resource(name=\) public void setUserDao(UserDao userDao) { } 注意:一般使用@Resource而不会使用@Autowired
不足:如果没有源码,就无法使用annotation,只能使用xml
this.userDao = userDao; private UserDao userDao = new UserDaoImpl(); public UserDao getUserDao() { } return userDao; //在这里引用了一个资源,这个资源的名称和这个setter方法后面的成员属性名称一致(userDao) //注意这个@Resource是J2EE的(import javax.annotation.Resource) @Resource public void setUserDao(UserDao userDao) { } public void add(User u){userDao.save(u);} this.userDao = userDao; 四、 @Componet
以上使用@Autowired、@Resource注解时,还是需要在xml文件配置bean,这样就达不到完全使用annotation进行注解。因此现在引用@Component在那个bean前进行注解,表示那个类是需要的bean
有了@Componet注解,这样就不需要在xml文件中配置bean了。
注意:@Componet是Spring的注解(org.springframework.stereotype.Component;)
例如: 前缀部分见上面代码,以此略。。。
代码: spring2.5 学习笔记 第19页 共46页
import javax.annotation.Resource; import org.springframework.stereotype.Component; // @Componet注解默认bean的名称是类名首字母小写 // 也可以利用value属性指定bean的名称 @Component(value=\) 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可以不写,直接写值) 说明:当Spring在加载配置文件时,发现有
@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=\) @Scope(\) 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(\); } spring2.5 学习笔记 第20页 共46页
六、 注解对应的jar包
1、@Autowired 2、@Qualifier 3、@Componet 4、@Resource 5、@Scope
6、@PostConstruct 7、@PreDestroy
org.springframework.beans.factory.annotation.Autowired; org.springframework.beans.factory.annotation.Qualifier; org.springframework.stereotype.Component; javax.annotation.Resource;
org.springframework.context.annotation.Scope; javax.annotation.PreDestroy; javax.annotation.PreDestroy;
第七课:AOP(面向切面编程)
一、 AOP概念
AOP:Aspect Oriented Programming(面向切面编程)
是对面向对象的思维方式的有国补充
二、 利用动态代理实现面向切面编程
场景:需要在执行方法之前加入一些日志。。。 可以使用以下三种方法
1、 继承 2、 组合
3、 动态代理(我们的实例) UserDao接口 public interface UserDao { } UserDaoImpl(UserDao接口的现实) public class UserDaoImpl implements UserDao { } UserService(业务层) public class UserService { } User(实体对象) private UserDao userDao = new UserDaoImpl(); public UserDao getUserDao() {return userDao;} public void setUserDao(UserDao userDao) {this.userDao = userDao;} public void add(User u){ userDao.save(u);} public void delete(User u){ userDao.delete(u);} @Override public void save(User u) {System.out.println(\);} @Override public void delete(User u) {System.out.println(\);} public void save(User u); public void delete(User u);