spring

时间:2024-03-03 10:33:28

基于注解的方式的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