基于注解的方式的spring 的配置
@Controller ----- 控制层 controller
@Service ----- 业务层 service
@Repository ------ 数据访问层 dao
@Component ------- 不属于 以上3层的 都用这个 注解
以上四个注解,如果 不指定 bean 的 id 的值 , 则 spring 在完成扫描后,
自动为其 增加 bean 的id的值, 默认为 注解所修饰的类的类名, 但 首字母变为 小写
@Autowired --- 修饰 属性时 按照 类型注入 byType
@Qualifier ----修饰属性时 按照 名字注入 byName , 一般配合 @Autowired 使用
@Resource -----修饰属性时, 既 可以byType 也可以 byName ,
但 因为 @Resource 是 java 中的不是 spring 包里, 因此 spring 官方不推荐使用
jdk 8 有 , jdk 17 没有这个注解
完全脱离 xml 的方式, 项目中 没有xml 文件
a. 对dao的实现类增加注解 @Repository
b. 对 service 的实现类 增加 注解 @Service
同时对 属性 private DeptDao deptDao 增加 @Autowired
(注意 属性deptDao 不需要生成 get/set)
c. 增加 配置类 增加 @Configuration
设置包的扫描, 增加 @ComponentScan(basePackages = {"com.dao","com.service"})
d. 修改 测试类, 通过
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
获得 上下文对象,
新建 module -- spring2_1,
实现 查询 所有的员工信息, 要求 使用 注解的形式 来做
3.28 基于 注解的 aop
User.java print() 调用 前 执行 UserProxy.java 中的beforeInvoke()方法
a. 引入 aop相关jar
spring-aop.jar 与 aspectjweaver.jar
b. 编写 com.aop.User.java 中 print()
com.aop.UserProxy.java 中的beforeInvoke()
因为 本项目为纯注解方式
因此 需要为 com.aop.User.java 与com.aop.UserProxy.java
增加 @Component 注解 ,添加到 spring 的上下文中
c. 为 UserProxy.java 增加 @Aspect注解
为 beforeInvoke() 增加 @Before注解 并配置表达式
d. 编写配置类 SpringConfig.java
增加 包扫描 com.aop,
同时 开启 aop 动态代理 @EnableAspectJAutoProxy