一、简介
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>官网: https://spring.io/projects/spring-framework#overview <bean id="唯一标识" > </bean> 官方下载工具: https://repo.spring.io/release/org/springframework/spring/ <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>github下载: https://github.com/spring-projects/spring-framework <bean id="唯一标识" > </bean> maven依赖:- <dependency>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><groupId>org.springframework</groupId>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><artifactId>spring-webmvc</artifactId>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><version>5.2.0.RELEASE</version>
- </dependency>
- <dependency>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><groupId>org.springframework</groupId>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><artifactId>spring-jdbc</artifactId>
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><version>5.2.0.RELEASE</version>
- </dependency>
复制代码 1.spring全家桶的结构构图:
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>最下边的是测试单元 <bean id="唯一标识" > </bean> 其中spring封装了自己的测试单元
- Core<bean id="唯一标识" > </bean>Container
<bean id="唯一标识" > </bean> 上边一层(Core<bean id="唯一标识" > </bean>Container)是核心容器,也是spring框架的基础<bean id="唯一标识" > </bean>也是核心
- core:提供了框架的基本组成部分 <bean id="唯一标识" > </bean>包括ioc和依赖注入功能
- beans:提供了BeanFactory <bean id="唯一标识" > </bean>实现了工厂模式。方便解耦
- context:上下文内容
- expression:提供了强大的表达式语言,用于在运行时查询和操作对象。
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.Data<bean id="唯一标识" > </bean>Access/Integration<bean id="唯一标识" > </bean>数据访问/集成
- 该模块包含JDBC、ORM、OXM、JMS和事务处理模块
- JDBC:提供了JDBC的抽象层,可以更方便的处理数据库
- ORM:模块提供了流行的对象关系型映射的API的集成
- OXM:模块提供了对OXM实现的支持(啥是OXM)
- JMS:包含了生产和消费消息的功能
- 事务:毋庸置疑,可以实现特殊接口类以及所有的pojo支持编程式和声明式事务管理。
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>4.Web
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>Web层由Web、Servlet、Web-Sockethe和Web-Portlet组成
- Web模块:提供面向web的基本功能和面向web的应用上下文
- Servlet模块:为web应用提供了模型视图看着(MVC)和RestWeb服务的实现。Spring的MVC框架可以将代码与web表单进行分离。
- Web-Socket
- Web-Portlet
<bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>5.AOP <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>Aop模块提供了面向切面编程的实现,允许自定义放啊拦截器和切入点,对代码继续宁解耦,可以减少模块间的耦合度,方便扩展和提高可维护性 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>6.Instrumentation <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>7.Messaging <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>8.Aspects <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>也是面向切面编程 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>9.Test二、IOC:
<bean id="唯一标识" > </bean>2.1理论:IOC也就是控制反转 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>其基本理解就是Spring将创建对象的过程转交给了IOC容器。,在其它类中我们只需要调用即可,不需要重新创建对象。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>在我们传统的三层架构模型中,目录结构分别为pojo、dao、和service <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>当我们在service中调用dao时,常会使用到 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> private<bean id="唯一标识" > </bean>UserDao<bean id="唯一标识" > </bean>userDao=new<bean id="唯一标识" > </bean>UserDao(); <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>这就是我们通常的思维,需要创建对象才可以使用,但是引入spring后,便可以使用标签就可以创建对象。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>2.2<bean id="唯一标识" > </bean>Spring<bean id="唯一标识" > </bean>中IOC的实现提供了两种方式: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>2.2.1BeanFactory:这是IOC的基本实现,是Spring的内部接口,不会提供给开发人员使用。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>加载配置文件时,不会创建对象,只有在使用的时候才会创建对象(一会可以代码解释 <bean id="唯一标识" > </bean>注意的是getBean的动作) <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>2.2.2ApplicationContext<bean id="唯一标识" > </bean>它是BeanFactory接口的子接口,提供了更加强大的功能开发人员进行加载配置文件的时候就进行了创建。- //1.引入jar包
- //2.编辑配置文件
- <?xml<bean id="唯一标识" > </bean>version="1.0"<bean id="唯一标识" > </bean>encoding="UTF-8"<bean id="唯一标识" > </bean>?>
- <beans<bean id="唯一标识" > </bean>xmlns="http://www.springframework.org/schema/beans"
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>xmlns:p="http://www.springframework.org/schema/p"
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>xsi:schemaLocation="http://www.springframework.org/schema/beans
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>http://www.springframework.org/schema/beans/spring-beans.xsd">
- 配置对象<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>id为唯一限定名<bean id="唯一标识" > </bean>一般为类名的小写<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>class是类所在的位置
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean<bean id="唯一标识" > </bean>id="teacher"<bean id="唯一标识" > </bean>></bean>
- </beans>
- //3.测试
- @Test
- public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testTeacherCreate(){
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//加载配置文件
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Teacher<bean id="唯一标识" > </bean>teacher<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("teacher",<bean id="唯一标识" > </bean>Teacher.class);
- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(teacher);
- }
- //在以上代码中<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>如果使用的是ApplicationContext<bean id="唯一标识" > </bean>则在进行加载配置文件时<bean id="唯一标识" > </bean>就已经在IOC容器中创建好了teacher对象
- //如果是使用的是<bean id="唯一标识" > </bean>BeanFactory<bean id="唯一标识" > </bean>ac<bean id="唯一标识" > </bean>创建对象,则在getbean时才会创建对象(不可操作,因为该接口不对开发人员透明)
复制代码 2.2.3<bean id="唯一标识" > </bean>ApplicationContext接口的实现类的继承关系

由上图可以看出,我们能使用的只有ClassPathXMlApplicationContext和FileSystemXmlApplicationContext来解析我们的xml配置文件。其中Class开头的可以去classpath路径下去寻找File开头的可以加载磁盘路径下的配置文件之后我们还可以使用AnnotationconfigApplicationContext可以使用注解方式来创建容器。 2.3<bean id="唯一标识" > </bean>IOC对Bean的管理 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>2.3.1<bean id="唯一标识" > </bean>创建bean <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>bean就是我们所说的Java对象,在之前所学的创建Java对象,一般是使用new关键字<bean id="唯一标识" > </bean>调用类中的构造器来创建对象。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>因此创建bean的方法就可以有三种方式:使用默认的无参构造、使用简单工厂方式创建、使用静态工厂方式创建 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>A:使用默认的无参构造- <bean id="唯一标识" > </bean>
复制代码 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>B<bean id="唯一标识" > </bean>:使用普通工厂类创建bean实例- 1.建立普通类teacher,包含个别属性,并添加get、set方法2.创建工厂类public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>SchoolFactory<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Teacher<bean id="唯一标识" > </bean>teacher=new<bean id="唯一标识" > </bean>Teacher();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Teacher<bean id="唯一标识" > </bean>getInstance(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>teacher;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}在工厂类中实例化对象,并添加一个普通方法可以获取到对象3.配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>第一个bean是一个实例化的对象也就是对象工厂第二个bean<bean id="唯一标识" > </bean>是利用对象工厂来创建的对象实例化<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>factory标签指的是<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>是哪个工厂对象,对应上边的id<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>factory-method指的是调用可以获取对象实例的方法(普通方法)4.测试:/***<bean id="唯一标识" > </bean>测试普通工厂类创建bean实例*/@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testTeacherFactory1(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//加载配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Teacher<bean id="唯一标识" > </bean>teacher1<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("teacher1",<bean id="唯一标识" > </bean>Teacher.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(teacher1);}
复制代码 如果在程序中可能需要频繁的创建某个类的实例对象,采用工厂模式会更好
<bean id="唯一标识" > </bean>2.3.2<bean id="唯一标识" > </bean>依赖注入<bean id="唯一标识" > </bean>也就是注入属性 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>依赖注入也就是对属性的注入,分为三种:构造器注入、set注入以及p标签注入 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>其中的构造注入,需要走的是带参构造 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>set注入,走的是set方法和无参构造 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>p标签注入和set注入基本一样,只不过头文件中需要引入 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> 对象工厂接口中最基本的是BeanFactory,它可以支持懒加载,也就是在加载配置文件时,不会创建实例对象,而是在需要调用时才会创建。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>如今使用的是applicationContext来解析配置文件,他的底层接口也是BeanFactory,但是它可以在加载配置文件的时候,就直接创建了bean实例。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>以Student类作为演示- public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>sex;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>Student(String<bean id="唯一标识" > </bean>sname,<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>age,<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>sex)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sname<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.age<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sex<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sex;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这是三个参数的无参构造");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>Student(String<bean id="唯一标识" > </bean>sname,<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>age)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sname<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.age<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这是第一个属性为name的两个参数的构造");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>Student(<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>age,String<bean id="唯一标识" > </bean>sname)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sname<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.age<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这是第一个属性为age的两个参数的构造");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>Student()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这是无参构造");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>getSname()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>setSname(String<bean id="唯一标识" > </bean>sname)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sname<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sname;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>getAge()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>setAge(int<bean id="唯一标识" > </bean>age)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.age<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>age;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>getSex()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>sex;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>setSex(String<bean id="唯一标识" > </bean>sex)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.sex<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>sex;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Override<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>toString()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>"Student{"<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>"sname='"<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>sname<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>'\''<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>",<bean id="唯一标识" > </bean>age="<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>age<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>",<bean id="唯一标识" > </bean>sex='"<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>sex<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>'\''<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>'}';<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}
复制代码 A<bean id="唯一标识" > </bean>构造器注入<bean id="唯一标识" > </bean>- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>看我们的实体类中就可以发现,我们的含有两个参数的构造器,有两个,在这个时候我们使用的构造器的构造函数就不知道使用的是哪个带参的构造器因此我们可以使用<bean id="唯一标识" > </bean>index来标识下标<bean id="唯一标识" > </bean>就可以指定先执行那个代餐的构造<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>其中constructor-arg中也可以使用type来标识参数类型来确定属性<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>如果是八大基本数据类型,则可以直接写关键字,如果是其他类型,则需要添加类的全限定路径<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>如果其中还含有其他对象类型的参数,<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>如此时的student类中包含属性<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>Grade<bean id="唯一标识" > </bean>grade;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>构造器:<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>
复制代码 B<bean id="唯一标识" > </bean>set方法注入 <bean id="唯一标识" > </bean>此时需要在类中对属性添加set方法<bean id="唯一标识" > </bean>以及无参构造- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>
复制代码 <bean id="唯一标识" > </bean>C<bean id="唯一标识" > </bean>:p标签注入<bean id="唯一标识" > </bean>此时就要添加对应的set方法以及无参构造<bean id="唯一标识" > </bean>以及添加头文件
<bean id="唯一标识" > </bean>D:也可以set注入和构造器注入<bean id="唯一标识" > </bean>混合使用<bean id="唯一标识" > </bean>但是需要有对应的构造方法
<bean id="唯一标识" > </bean>2.3.3 <bean id="唯一标识" > </bean> 不同属性类型对应的写法: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>由于我们的属性的在不同的使用场景下可能有不同的属性类型,如集合、数组等情况,因此可能会需要使用到不同的标签,下面只演示使用set方法注入的情况<bean id="唯一标识" > </bean>那就意味着,我们需要添加构造方法和无参构造。- 实体类public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>Order<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>[]<bean id="唯一标识" > </bean>cources;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>List<bean id="唯一标识" > </bean>lists;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>Map<bean id="唯一标识" > </bean>maps;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>Set<bean id="唯一标识" > </bean>sets;
复制代码- 配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>美羊羊<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>兰羊羊<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>舒克<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>贝塔<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>mysql<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>javase<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>javaweb<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>
复制代码 数组类型的使用 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>list类表类型的使用: <bean id="唯一标识" > </bean> set集合类型的使用 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>map集合类型的使用 2.4<bean id="唯一标识" > </bean>Bean的作用域:<bean id="唯一标识" > </bean>scope属性
- singleton:默认值 <bean id="唯一标识" > </bean>单例模式<bean id="唯一标识" > </bean>每次获取的bean都是同一个对象
- prototype:每次获取bean都会被重新实例化
- request:每次请求都会重新实例化对象,但是在同一请求下获取的情况下的bean是单例的
- session <bean id="唯一标识" > </bean>每次会话内的bean是单例的
- application:整个应用程序对象内的bean实例都是单例模式的
- websocket:同一个websocket对象内的对象是单例的。
- Singleton<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>测试类:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testStudent3(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//加载配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>BeanFactory<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig2.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>stu1<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("stu3",<bean id="唯一标识" > </bean>Student.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu1);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>stu2<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("stu3",<bean id="唯一标识" > </bean>Student.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu2);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu1==stu2);}结果:com.qiang.pojo.Student@10a035a0com.qiang.pojo.Student@10a035a0true
复制代码- prototype测试类@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testStudent4(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//加载配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>BeanFactory<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig2.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>stu1<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("stu4",<bean id="唯一标识" > </bean>Student.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu1);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>stu2<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("stu4",<bean id="唯一标识" > </bean>Student.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu2);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(stu1==stu2);}结果:com.qiang.pojo.Student@10a035a0com.qiang.pojo.Student@67b467e9false
复制代码 2.5 <bean id="唯一标识" > </bean>bean的生命周期 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> 2.5.1<bean id="唯一标识" > </bean>一般理解下的bean的生命周期:
- 通过构造器创建bean实【此时执行的是无参构造】
- 为bean属性设置值以及对其他的bean的引用【set注入】
- 调用bean的初始化方法,在配置文件中配置
- bean对象可以使用了<bean id="唯一标识" > </bean>【已经获取到了对象】
- 当容器关闭时,调用bean的销毁方法【在配置文件中配置】
- 实体类对象public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>People<bean id="唯一标识" > </bean>implements<bean id="唯一标识" > </bean>Serializable<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>oid;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>People()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("第一步:执行无参构造");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>getOid()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>oid;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>setOid(String<bean id="唯一标识" > </bean>oid)<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>this.oid<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>oid;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("第二步:<bean id="唯一标识" > </bean>调用set方法给属性设置值......");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>initMethod(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("第三步:执行初始化方法............");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>destroyMethod(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("第五步:执行销毁方法............");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Override<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>toString()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>"People{"<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>"oid='"<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>oid<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean>'\''<bean id="唯一标识" > </bean>+<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>'}';<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}
复制代码- 配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>添加初始化方法<bean id="唯一标识" > </bean>和销毁方法其中的标签init-method、destroy-method<bean id="唯一标识" > </bean>中的方法是在实体类中自定义的<bean id="唯一标识" > </bean>测试类/***<bean id="唯一标识" > </bean>测试bean的生命周期*/@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testBeanLive(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//加载配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ClassPathXmlApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig2.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//获取bean实例<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>People<bean id="唯一标识" > </bean>people<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("people",<bean id="唯一标识" > </bean>People.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("第四步:获取bean实例对象<bean id="唯一标识" > </bean>。。。");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(people);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//手动销毁<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ac.close();}结果:第一步:执行无参构造第三步:执行初始化方法............第四步:获取bean实例对象<bean id="唯一标识" > </bean>。。。People{oid='null'}第五步:执行销毁方法............
复制代码
<bean id="唯一标识" > </bean>2.5.2<bean id="唯一标识" > </bean>添加后置处理器的生命周期的方法
- 第一步:执行无参数的构造方法<bean id="唯一标识" > </bean>。。。
- 第二步:<bean id="唯一标识" > </bean>调用set方法给属性设置值......
- 在初始化之前执行的方法
- 第三步:执行初始化方法............
- 在初始化之后执行的方法
- 第四步:获取bean实例对象<bean id="唯一标识" > </bean>。。。
- 第五步:执行销毁方法............
- 在实体类中<bean id="唯一标识" > </bean>实现了BeanPostProcessor接口<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>并重写了@Overridepublic<bean id="唯一标识" > </bean>Object<bean id="唯一标识" > </bean>postProcessAfterInitialization(Object<bean id="唯一标识" > </bean>bean,<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>beanName)<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>BeansException<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("在初始化之前执行的方法");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>bean;}@Overridepublic<bean id="唯一标识" > </bean>Object<bean id="唯一标识" > </bean>postProcessBeforeInitialization(Object<bean id="唯一标识" > </bean>bean,<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>beanName)<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>BeansException<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("在初始化之后执行的方法");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>return<bean id="唯一标识" > </bean>bean;}
复制代码
<bean id="唯一标识" > </bean>2.6<bean id="唯一标识" > </bean>自动装配: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>装配的意思是<bean id="唯一标识" > </bean>就是怎么去创建对象spring的装配方式有三种: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>在xml中显示的装配<bean id="唯一标识" > </bean>也就是使用标签 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>在Java中的显示配置<bean id="唯一标识" > </bean>new关键字 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>自动装配机制 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>Spring的自动装配你有两个角度的实现 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>分别是<bean id="唯一标识" > </bean>组件扫描和<bean id="唯一标识" > </bean>自动装配 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>组件扫描:spring<bean id="唯一标识" > </bean>回自动发现应用上下文中所创建的bean <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>自动装配:spring自动满足bean之间的依赖,也就是使用IOC和DI <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>自动装配的实现方式有两种,一种是通过xml的bena标签<bean id="唯一标识" > </bean>也可以使用注解方式 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>2.6.1 <bean id="唯一标识" > </bean>通过XMl中的标签<bean id="唯一标识" > </bean>自动装配 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>A:byName<bean id="唯一标识" > </bean>按名称自动装配 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>通俗理解:在xml配置文件中<bean id="唯一标识" > </bean>使用bean标签<bean id="唯一标识" > </bean>通过bynae自动诸如和,每次遇到名称为<bean id="唯一标识" > </bean>byname属性值时就自动创建对象- 实体类Dogprivate<bean id="唯一标识" > </bean>String<bean id="唯一标识" > </bean>color;private<bean id="唯一标识" > </bean>int<bean id="唯一标识" > </bean>age;配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>测试类:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testDog1(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Dog<bean id="唯一标识" > </bean>d1<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("d1",<bean id="唯一标识" > </bean>Dog.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(d1.getAge());}结果:15
复制代码 B.byType<bean id="唯一标识" > </bean>按类型自动装配- 配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>测试类:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testDog1(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Dog<bean id="唯一标识" > </bean>d1<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean(Dog.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println(d1.getAge());}结果:21
复制代码
2.6.2根据注解开发 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>spring中的注解注入的有:@Autowired、@Resources<bean id="唯一标识" > </bean>@Qualifier <bean id="唯一标识" > </bean> @Service<bean id="唯一标识" > </bean>@Commonent<bean id="唯一标识" > </bean>@Controller <bean id="唯一标识" > </bean>@Repository <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>在使用注解开发时,需要现在配置文件中开启组件扫描功能 开启组件扫描 <bean id="唯一标识" > </bean>便可以自动查找其中的自动注入 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>不同的注解的区分:
- Autowired是自动注入,自动从spring的上下文找到合适的bean来注入。
- Resource用来指定名称注入。
- Qualifier和Autowired配合使用,指定bean的名称。
- Service,Controller,Repository分别标记类是Service层类,Controller层类,Dao层的类,spring扫描注解配置时,会标记这些类要生成bean。
- Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。
@Autowired注解 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>默认按类型装配springbean<bean id="唯一标识" > </bean>默认情况下,必须要求依赖对象必须存在。如果容器中有多个相同类型的bean,则框架会抛出异常。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>@Qualifier <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>此注解用来消除依赖注入冲突的。我们可以消除需要注入那个bean的问题 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>通过该注解,我们可以使用特定的Spring<bean id="唯一标识" > </bean>Bean一起装配,Spring框架可以从多个相同类型并满足装配要求的bean中找到我们想要的。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>@Resource是按名称装配: - 分析:<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>由于注解@Autowired是默认按类型装配的,一个类型的可能会有多个实现方法<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>因此在演示的时候<bean id="唯一标识" > </bean>就可以选择一个接口,有多个实现类来作为演示1.构建一个接口public<bean id="唯一标识" > </bean>interface<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>sayName();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>saysex();}2.创建多个实现类(以三个举例)@Componentpublic<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherServiceImpl1<bean id="唯一标识" > </bean>implements<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Override<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>sayName()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("A");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}@Componentpublic<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherServiceImpl1<bean id="唯一标识" > </bean>implements<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Override<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>sayName()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("B");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}@Componentpublic<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherServiceImpl1<bean id="唯一标识" > </bean>implements<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Override<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>sayName()<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("C");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}3.创建两外一个类,可以调用该类的实现类public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherController<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Autowired<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//创建对象<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>teacherService;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>soutResult(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>teacherService.sayName();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}4.修改配置文件<bean id="唯一标识" > </bean>开启扫描<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>5.测试:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testAopAno(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>TeacherController<bean id="唯一标识" > </bean>contro<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("teacherController",<bean id="唯一标识" > </bean>TeacherController.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>contro.soutResult();}6.观察结果:org.springframework.beans.factory.UnsatisfiedDependencyException:<bean id="唯一标识" > </bean>Error<bean id="唯一标识" > </bean>creating<bean id="唯一标识" > </bean>bean<bean id="唯一标识" > </bean>with<bean id="唯一标识" > </bean>name<bean id="唯一标识" > </bean>'teacherController':<bean id="唯一标识" > </bean>Unsatisfied<bean id="唯一标识" > </bean>dependency<bean id="唯一标识" > </bean>expressed<bean id="唯一标识" > </bean>through<bean id="唯一标识" > </bean>field<bean id="唯一标识" > </bean>'teacherService';<bean id="唯一标识" > </bean>nested<bean id="唯一标识" > </bean>exception<bean id="唯一标识" > </bean>is<bean id="唯一标识" > </bean>org.springframework.beans.factory.NoUniqueBeanDefinitionException:<bean id="唯一标识" > </bean>No<bean id="唯一标识" > </bean>qualifying<bean id="唯一标识" > </bean>bean<bean id="唯一标识" > </bean>of<bean id="唯一标识" > </bean>type<bean id="唯一标识" > </bean>'com.qiang.service.TeacherService'<bean id="唯一标识" > </bean>available:<bean id="唯一标识" > </bean>expected<bean id="唯一标识" > </bean>single<bean id="唯一标识" > </bean>matching<bean id="唯一标识" > </bean>bean<bean id="唯一标识" > </bean>but<bean id="唯一标识" > </bean>found<bean id="唯一标识" > </bean>3:<bean id="唯一标识" > </bean>teacherServiceImpl1,teacherServiceImpl2,teacherServiceImpl3分析:由于在service接口有多个实现类,使用autowired是按类型注入,可能会找不到使用哪个<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>因此可以搭配使用@Qualifier注解修改第三步:public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherController<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Autowired<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Qualifier("teacherServiceImpl1")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//创建对象<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>teacherService;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>soutResult(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>teacherService.sayName();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}继续进行测试<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>结果为:A结果显示正常继续修改第三步:public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>TeacherController<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Resource(name<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"teacherServiceImpl1")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//创建对象<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>private<bean id="唯一标识" > </bean>TeacherService<bean id="唯一标识" > </bean>teacherService;<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>soutResult(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>teacherService.sayName();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}继续进行测试<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>结果为:A结果显示正常
复制代码
通过上述例子可以看出,如果一个类需要由多个实例变量时,可以搭配使用 @Autowired <bean id="唯一标识" > </bean> @Qualifier("teacherServiceImpl1"),也可以单独使用 @Resource(name<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"teacherServiceImpl1"
三、AOP <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.1AOP简介: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>AOP通俗理解就是面向切面编程,是对面向对象的一种补充、将那些与业务无关的,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模板,这个模板就被称为”切面“,使用AOP减少了系统中的重复代码、降低了模块间的耦合度,同时提高了系统的可维护性。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>AOP的底层是动态代理,分别为JDK动态代理和CGLIB动态代理 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.2术语: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>连接点:可以被增强的方法 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> 切入点: 实际真正被增强的方法,称为切入点 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> 通知(增强):又被叫做增强,实际增强的逻辑部分称为通知[增强] <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>切面(是个动作):把通知应用到切入点的过程。 其中:通知有五种: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>前置通知(before)<bean id="唯一标识" > </bean>后置(返回)通知(after<bean id="唯一标识" > </bean>returning)<bean id="唯一标识" > </bean>、环绕通知(Around)、异常通知(after-throwing) 通知通俗理解就是AOP暴漏给我们的方法,我们在这个方法中直接定义需要扩展的代码即可,但是其执行顺序,交给了spring来处理。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.3<bean id="唯一标识" > </bean>AOP的准备工作:首先介绍一下Aspect<bean id="唯一标识" > </bean>J 这个是一个独立的AOP模型,但不是Spring框架的内容。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>因此在演示的时候需要导入相关的jar包,或者使用maven文件 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>切入点表达式:知道对那个类的方法进行增强 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>execution(<bean id="唯一标识" > </bean>[权限修饰符]<bean id="唯一标识" > </bean>[返回值类型]<bean id="唯一标识" > </bean>[类的全路径]<bean id="唯一标识" > </bean>[方法名][参数列表]) <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.4<bean id="唯一标识" > </bean>AOP通知 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>3.4.1基于XML的配置通知 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>A<bean id="唯一标识" > </bean>第一种方式:- 1.添加jar包2.建造实体类和代理对象类<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>普通类应包含一个普通方法,该普通方法也就是要增强的那个方法public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>implements<bean id="唯一标识" > </bean>Serializable<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>add(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这个只是一个普通的方法");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>StudentProxy<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//配置前置通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>before(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("前置通知。。。。。");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//配置后置返回通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterreturning(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("后置返回通知....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//配置最终通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>after(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("最终通知....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//配置环绕通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>around(ProceedingJoinPoint<bean id="唯一标识" > </bean>proceedingJoinPoint)<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>Throwable<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕通知前");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>proceedingJoinPoint.proceed();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕通知后....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//配置异常通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterThrow(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("异常通知....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}3.修改配置文件在修改配置文件时应注意,头文件也需要进行修改xmlns:aop="http://www.springframework.org/schema/aop"xsi:http://www.springframework.org/schema/aop<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>https://www.springframework.org/schema/aop/spring-aop.xsd"//注入<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>以上没有演示异常通知,异常通知在程序发生异常时才会发生。测试:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testAopXmlDemo1(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Student<bean id="唯一标识" > </bean>student<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("student",<bean id="唯一标识" > </bean>Student.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>student.add();}结果:前置通知。。。。。环绕通知前这个只是一个普通的方法环绕通知后....最终通知....后置返回通知....
复制代码 分析: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>前置通知:在连接点之前执行的通知 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>后置返回通知:一般在方法的结尾,必然会多一个返回值 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>环绕通知:包含了前置通知和后置通知 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>异常通知:处理异常数据,事务回滚 <bean id="唯一标识" > </bean> 3.4.2基于注解的配置通知 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>B:第二种方式- 1.引入jar包<bean id="唯一标识" > </bean>2.创建实体类@Componentpublic<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>User<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>add(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("这是一个普通方法");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}3.创建代理类@Component@Aspect<bean id="唯一标识" > </bean>//生成代理对象public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>UserProxy<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//前置通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Before(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>before(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("前置通知。。。");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//后置返回通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@AfterReturning(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterReturning(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("后置返回通知afterReturning....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//环绕通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Around(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>around(ProceedingJoinPoint<bean id="唯一标识" > </bean>proceedingJoinPoint)<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>Throwable{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕之前....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//<bean id="唯一标识" > </bean>被增强的方法执行了<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>proceedingJoinPoint.proceed();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕之后....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//异常通知<bean id="唯一标识" > </bean>只有手动创造了异常才可以触发这个通知//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@AfterThrowing(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterThrowing(){//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("异常通知<bean id="唯一标识" > </bean>afterThrowing......");//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}//最终通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@After(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>after(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("最终通知....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}}//修改配置文件<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//测试:@Testpublic<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testAopAnno(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ApplicationContext<bean id="唯一标识" > </bean>ac=new<bean id="唯一标识" > </bean>ClassPathXmlApplicationContext("applicationConfig2.xml");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>User<bean id="唯一标识" > </bean>user<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>ac.getBean("user",<bean id="唯一标识" > </bean>User.class);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>user.add();}结果:环绕之前....前置通知。。。这是一个普通方法环绕之后....最终通知....后置返回通知afterReturning....
复制代码 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>C:第三种方式抽取重复代码- 只需要修改代理类对象就可以了@Component@Aspect<bean id="唯一标识" > </bean>//生成代理对象public<bean id="唯一标识" > </bean>class<bean id="唯一标识" > </bean>UserProxy<bean id="唯一标识" > </bean>{//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>抽取切入点<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Pointcut(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"execution(*<bean id="唯一标识" > </bean>org.qiang.aop.anno.pojo.User.add(..))")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>pointcutDemo(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//前置通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Before(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"pointcutDemo()")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>before(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("前置通知。。。");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//后置返回通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@AfterReturning(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"pointcutDemo()")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterReturning(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("后置返回通知afterReturning....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//环绕通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@Around(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"pointcutDemo()")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>around(ProceedingJoinPoint<bean id="唯一标识" > </bean>proceedingJoinPoint)<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>Throwable{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕之前....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//<bean id="唯一标识" > </bean>被增强的方法执行了<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>proceedingJoinPoint.proceed();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("环绕之后....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//异常通知<bean id="唯一标识" > </bean>只有手动创造了异常才可以触发这个通知//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@AfterThrowing(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"pointcutDemo()")//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>afterThrowing(){//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("异常通知<bean id="唯一标识" > </bean>afterThrowing......");//<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//最终通知<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>@After(value<bean id="唯一标识" > </bean>=<bean id="唯一标识" > </bean>"pointcutDemo()")<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>after(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>System.out.println("最终通知....");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}
复制代码 <bean id="唯一标识" > </bean>D<bean id="唯一标识" > </bean>: <bean id="唯一标识" > </bean>AOP<bean id="唯一标识" > </bean>底层是动态代理默认的是JDK动态代理的方法,也可以通过 <bean id="唯一标识" > </bean> 标签来修改,其默认值是false是JDK动态代理的格式,改为true就可以使用CGLIB代理格式。
3.5<bean id="唯一标识" > </bean>Spring的事务管理 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>Spring框架将固定的冗余部分的套路代码进行了封装,对程序员仅提供简单的XML配置就可以完成事务的管理,不需要在编写事务管理代码。这也就是Spring的非常重要功能--声明式事务 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>声明式事务是基于AOP实现的(动态代理)。程序员只需要调用持久层代码和业务逻辑代码,将开启事务的代码反正该了前置通知中,将事务回滚和事务提交的代码放在了后置通知中。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>使用事物可以保证操作前后数据的完整性,事务的四个特性:ACID<bean id="唯一标识" > </bean>原子性、一致性、隔离性和持久性 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>编程式事务:整个事务的操作都是由程序员进行手动管理,手动提交,手动回滚 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>声明式事务:整个事务由其他框架进行管理,我们使用事务的时候只需要进行简单的声明或 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> 者配置即可。 <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>Spring中的Tx模块就包含了对声明式事务的封装,以下是我们的日常的手动提交事务的写法:- public<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>testdemo1()<bean id="唯一标识" > </bean>throws<bean id="唯一标识" > </bean>SQLException<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>Connection<bean id="唯一标识" > </bean>conn=<bean id="唯一标识" > </bean>DriverManager.getConnection("","","");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//关闭自动提交<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>conn.setAutoCommit(false);<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>try<bean id="唯一标识" > </bean>{<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>PreparedStatement<bean id="唯一标识" > </bean>ptst=conn.prepareStatement("insert<bean id="唯一标识" > </bean>into<bean id="唯一标识" > </bean>bank<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>values=(?,?)");<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>ptst.executeUpdate();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}catch<bean id="唯一标识" > </bean>(Exception<bean id="唯一标识" > </bean>e){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>//再发生异常时,就会进行事务的回滚<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>conn.rollback();<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>}
复制代码 <bean id="唯一标识" > </bean> 回顾Aop切面编程,可以发现共通点,在关闭自动提交的部分,可以用前置通知来代替,try代码块的部分就可以理解为是切入点,事务提交的部分可以使用后置通知来实现,而对于出现异常,事务回滚的操作就可以使用异常通知来处理。也就是:- 在org.springframework.jdbc.datasource.DataSourceTransactionManager<bean id="唯一标识" > </bean>中的方法:protected<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>doBegin(){<bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>conn.setAutoCommit(false)}protected<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>doBegin()<bean id="唯一标识" > </bean>{}protected<bean id="唯一标识" > </bean>void<bean id="唯一标识" > </bean>doRollback()<bean id="唯一标识" > </bean>{}
复制代码
添加事务通知:- <bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean><bean id="唯一标识" > </bean>
复制代码
声明式事务的四个基础属性介绍: <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean> <bean id="唯一标识" > </bean>标签下有属性配置,也可以用在注解上:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |