12.使用Spring实现AOP
【重点】使用AOP织入,需要导入一个依赖包
org.aspectj
aspectjweaver
1.9.4
方式一:使用Spring的API接口方式二:自定义来实现AOP方式三:使用注解实现
11.动态代理
动态代理
动态代理和静态代理角色一样
动态代理的代理类是动态生成的,不是我们直接写好的!
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
基于接口–JDK代理
基于类:cglib
java字节码实现:javasist
需要了解两个类:Proxy:代理,InvocationHandler:调用处理程序
动态代理的好处:
可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
公共也就就交给代理角色!实现了业务分工
公共业务发生扩展的时候,方便几种管理
一个动态代理类代理的是一个接口,一般就是对应的一类业务
一个动态代理类可以代理多个类,只要实现同一个接口
10.代理模式
代理模式有什么用?因为这个是SpringAOP的底层!【SpringAOP和SpringMVC】
静态代理
动态代理
1.静态代理角色分析:
抽象角色:一般会使用接口或者抽象类来解决
真实角色:被代理的角色
代理角色:代理真实的角色后,然后会做一些附属操作
代码步骤:
接口
//租房
public interface Rent {
public void rent();
}
真实角色
//房东
public class Host implements Rent{
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
代理角色
public class Proxy implements Rent {
private Host host;
public Proxy(){
}
public Pr ...
9.完全使用java的方式配置Spring
纯Java的配置实质还是注解
JavaConfig是Spring的一个
User//这个注解的意思,就是说明这个类被Spring接管了,注册到了容器
@Component
public class User {
private String name;
public String getName() {
return name;
}
@Value("冰")
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'} ...
8.使用注解实现自动装配
在Spring4之后,要使用注解开发,必须保证aop的包导入了
使用注解需要导入context,增加注解的支持<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.sp ...
7.bean的自动装配
1.bean的自动装配
自动装配是Spring满足bean依赖的一种方式!
Spring会在上下文中自动寻找,并自动给bean装配属性!
在Spring中有三种装配的方式
在xml中显示的设置
在Java中显示设置
隐式的自动装配bean【重要】
测试环境搭建:一个人有两个宠物
2.ByName自动装配<!--byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的bean的id-->
<bean id="people" class="com.mine.pojo.People" autowire="byName">
<property name="name" value="天"/>
</bean>
3.ByType自动装配<bean id="cat" class="com.mine.pojo.Cat"/>
<bean id="dog333& ...
6.依赖注入
1.构造器注入前面写过了
2.Set方式注入【重点】
依赖注入:Set注入!
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入
【环境搭建】
复杂类型
public class Address {
private String address;
public String getAddress(){
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
真实测试对象
public class Student {
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
priva ...
5.Spring配置
1.别名<!--给user起一个别名-->
<alias name="user" alias="userNew"/>
2.Bean配置<!--id : bean 的唯一标识符,也就是相当于我们的对象名
class: bean 对象所对应的全限定名:包名+类型
name :也是别名 -->
<bean id="userT" class="com.mine.pojo.UserT" name="userT2,u2">
<property name="name" value="Violet"/>
</bean>
3.import这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并为一个假设,现在项目中有多个人,这三个人复制不同的类开发,不同的类需要注册不同的bean中,我们可以利用import将所有人的bean.xml合并为一个总的!
...
4.IOC创建对象的方式
使用无参构造创建对象,默认!
假设我们要使用有参构造创建对象。
下标赋值、
<!--第一种:使用下标的方式设值-->
<bean id="user" class="com.mine.pojo.User">
<constructor-arg index="0" value="冰"/>
</bean>
– 类型
<!--第二种方式 通过类型创建,不建议使用-->
<bean id="user" class="com.mine.pojo.User">
<constructor-arg type="java.lang.String" value="冰"/>
</bean>
– 参数名
<!--第三种 直接通过参数名设置-->
<bean id="user" class=&qu ...
3.Hello Spring
xml配置<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here --> ...