Bean管理(注解)和AOP操作(基于配置)

2018-06-18 02:02:59来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

 

spring的bean管理(注解)

  注解写法:@注解名称(属性名称=属性值)

  注解使用在类上面,方法上面和属性上面

  Spring注解开发的准备

    1. 导入基本jar包,与spring的bean管理(配置文件)的那一章节引用相同;
    2. 导入aop的jar包
    3. 创建类,创建方法
    4. 创建spring配置文件,引入约束

        4.1 上一篇做ioc的基本功能,引入的是beans

        4.2 做spring的ioc注解开发,还要引入新的约束(context)

           

         4.3 在上一步中的xml配置文件中加入开启注解扫描的标签,其中base-package是待创建类所在包的名字,可以只写到父包名,这样会包含所有的子包名

              

  • 使用注解创建对象

    1.  在待创建对象的类上面使用注解@Component
@Component(value = "user")   //完全等同于在xml中添加标签 <bean id="user" class =""/>;可以看出value就是bean中的id值
public class User{
    public void add(){
          System.out.println("add.....");
      }  
} 

       2.  依然可以采用相同写法的测试代码对以上待创建类进行测试,注意getBean方法中的参数此时为注解中value值,此处也看出注解中value和xml中的配置对象的id为同一个东西

      

      3.  创建对象还有其他三个注解

       

      4.    创建对象是单实例还是多实例(不写默认是单实例)

        方法:在@Component注解下添加@Scope(value=“prototype”)

  • 使用注解注入属性

      1.案例:创建service类,创建dao类,在service得到dao对象,

        方法一:使用@Autowired   [根据类名来找到需要创建对象的类,此注解没有参数,是根据被注解的属性的类型来确定类名]

        方法二:使用@Resource(name="userDao")  [此userDao即是类UserDao中注解的value值,也可以是xml中待创建类的id值]

@Compontent(value="userService")//value这个单词可以省略不写
public class UserService{
      //1定义dao类型属性

     //使用注解方式时候不需要set方法 ,在dao属性上面使用注解完成对象注入 

        @Autowired
        private UserDao userDao;
   
        public void add() {
            userDao.add();
     }
}
//另一个java文件中
@Compontent(value="userDao"public class UserDao{
      public void add(){
          System,out.println("add........");
    }
}  

 

  • xml和注解方式的混合使用

     方式:创建对象操作使用配置文件方式实现(如下1.1);

        注入属性操作使用注解方式实现(如下1.2)

    1. 案例:在BookService类中调用BookDao类和OrdersDao类

          1.1 在xml中添加待创建类  (等同于在类中直接使用@Compontent(value="userDao")这种写法)

          

          1.2  在BookService类中添加属性(两个Dao类),以下@Resource(name ="bookDao")中name的取值,为xml中对应的id值,也可以把xml添加待创建对象的bean标签理解为在待创建的类中加了@Compontent(value="bookDao"),两个效果是一样的

          

          

AOP

  • aop概述

    1. AOP:面向切面(方面)编程,扩展功能不修改源代码实现

    2. AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码

    3. AOP之前的原始方式来扩展功能

    

    

  • aop底层原理

    1.横向机制的原理:

      1.1 针对有接口的情况

    

      1.2 针对non 接口的情况

      

    个人觉得与纵向抽取机制的区别是,此机制是对目标类创建子类,在子类中完成增强,而纵向抽取是以目标类继承特指的父类完成增强

  • aop操作相关术语

       Joinpoint-连接点:类里面可以被增强的方法,这些方法称为连接点;

    Pointcut-切入点:实际被增强的方法称为切入点;

    Advice-通知/增强:方法中实际需要被增强的逻辑称为通知/增强,比如扩展个日志功能,这个日志功能就称为通知/增强,

       通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能);

    Aspect-切面: 把我们的增强应用到具体方法上面,这过程称为切面 【把Advice应用到pointcut的过程】

spring的aop操作(基于aspectj的xml方式)

  • aspectj

    1. 在spring里面进行aop操作,使用aspectj实现

    2. aspectj不是spring的一部分,是个框架,和spring一起使用进行aop操作

    3. 使用aspectj实现aop的两种方式:

      (1)基于aspectj的xml配置 【本篇幅介绍】

      (2)基于aspectj的注解方式 【下一篇幅介绍】

  • Aop操作准备

        1. 导入aop相关的jar包

     2. 创建spring核心配置文件,导入aop约束

    

     3.   使用表达式配置切入点【实际被增强的方法】

      常用的表达式

      execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

       (1)execution(* cn,itcast.aop.Book.add(..))

       (2) execution(* cn.itcast.aop.Book.*(..))

       (3) execution(* *.*(..))

         (4) 匹配所有save开头的方法 execution(* save*(..))

  • Aspectj的aop操作 

      

    前置增强的配置如上code所示,在以下测试代码时:在执行add()时,会先执行增强类myBook中的前置增强方法before1,然后再执行add

      

    后置增强的写法和配置与前置增强类似,

      

    下面再介绍一种环绕增强,其增强实现如下:这里主要区别是引入了ProceedingJoinPoint类,

    

      

 

log4j介绍

    1.通过log4j可以看到程序运行过程中更详细的信息

      (1)经常使用log4j查看日志

    2.使用:  

      (1)导入log4j的jar包

      (2)复制log4j的配置文件,复制到src下面

        

    3.设置日志级别:

        log4j.rootLogger = info,stdout

      (1) info: 基本信息

       (2)debug:更详细信息

    

 

 

spring整合web项目演示

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:线程看一看

下一篇:反射技术初步