【2021Spring编程实战笔记】Spring开发分享~(上)+https://developer.aliyun.com/article/1621239
04、构造注入(用的不多,只做了解)
- 将需要注入的对象声明为成员变量
package construct; public class Car { private String brand; private String corp; private Double price; private int maxSpeed; }
- 利用构造函数,我写了两个:
package construct; public class Car { public Car(String brand, String corp, Double price) { this.brand = brand; this.corp = corp; this.price = price; } public Car(String brand, String corp, int maxSpeed) { this.brand = brand; this.corp = corp; this.maxSpeed = maxSpeed; } }
- 工厂容器里边配置一下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="car" class="construct.Car"> <constructor-arg value="Audi" type="java.lang.String"/> <constructor-arg value="luntai" type="java.lang.String"/> <constructor-arg value="30" type="java.lang.Double"/> </bean> <bean id="car1" class="construct.Car"> <constructor-arg value="Audi" type="java.lang.String"/> <constructor-arg value="luntai" type="java.lang.String"/> <constructor-arg value="300" type="int"/> </bean> </beans>
- 构造注入的测试
package construct; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class CarTest { public static void main(String[] args) { ApplicationContext Context = new ClassPathXmlApplicationContext("/init/init.xml"); Car car = (Car) Context.getBean("car"); System.out.println(car.toString()); } }
- 执行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBfGmG1O-1604408298814)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028105124.png)]
05、自动注入(用的也不多)
package autodi; public class BookDAOImpl implements BookDAO { private BookDAO bookDAO; @Override public void save() { System.out.println("BookDAO invoke~~~"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="bookDAO" class="autodi.BookDAOImpl"/> <!-- autowrite的作用:用来指定当前组件中依赖的组件的注入方式是什么 注意:类中成员变量与工厂中bean的id一致则自动赋值,否则不注入 byname:根据类中的成员变量名进行注入 bytype:根据类中的成员变量类型进行注入 --> <!--<bean id="bookService" class="autodi.BookServiceImpl" autowire="byName"/>--> <!-- 类中成员变量的类型与工厂中bean的类型一致则强行注入,否则不注入。 --> <bean id="bookService" class="autodi.BookServiceImpl" autowire="byType"/> </beans>
06、spring工厂的细节
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-583X3hlZ-1604408298815)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028204142.png)]
07、AOP面向切面编程
7.1、静态代理(proxy)
- 给一幅图做一个简单介绍:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XhNOlhdV-1604408298821)(https://img.rruu.net/image/5f9a7bea0f104)]
7.2、动态代理
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TnV8QcCC-1604408298824)(https://img.rruu.net/image/5f9aa84aab174)]
7.3、面向切面编程AOP原理概念
7.4、AOP编程的编程步骤
7.4.1引入AOP编程相关的依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.20.RELEASE</version> </dependency> </dependencies>
7.4.2开发项目额外功能通知
7.4.3配置切面spring.xml
7.5、aop编程之环绕通知
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsEUfSke-1604408298833)(https://img.rruu.net/image/5f9faf6ab5d89)]
7.6、切入点表达式
- 切到某个类,就会为这个类创建 动态代理对象。
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFkNJslW-1604408298835)(https://img.rruu.net/image/5fa0a90a1676a)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf2nKyjC-1604408298836)(https://img.rruu.net/image/5fa0aaebe47a7)]
08、IOC和AOP的复习
09、spring创建复杂对象
除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。
对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?
10、spring整合mybatis思路分析
10.1、引入依赖
bj-1604408298837)]
08、IOC和AOP的复习
- [外链图片转存中…(img-0gRvXlDK-1604408298839)]
[外链图片转存中…(img-A6sMkGOT-1604408298840)]
09、spring创建复杂对象
除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。
对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?
[外链图片转存中…(img-VsptG5pO-1604408298841)]
[外链图片转存中…(img-uZtdmRb6-1604408298842)]
[外链图片转存中…(img-eCJdi5fG-1604408298843)]