Spring5
- Spring
- 一、Spring IOC创建对象的方式
- 1、使用该对象的无参构造方法(默认创建方式,依赖set方法)
- 2、如果要使用有参构造创建对象(不依赖set方法)
- 3、Spring加载beans.xml时,所有注册的对象都会被创建,且是单例模式
- 二、Spring-Setter
-
- 三、依赖注入
- 1、构造器注入
- 2、Set方式注入
- 3、拓展方式注入
- 4、bean的作用域
- 四、Bean的自动装配
- 自动装配是Spring满足bean依赖的一种方式
- Spring会在上下文中自动寻找,并自动给bean装配属性
- Spring的三种装配方式
- 测试自动装配
- 总结:
- 使用Java的方式配置Spring (Java Config)
- 五、代理模式
-
- 六、AOP
Spring
一、Spring IOC创建对象的方式
1、使用该对象的无参构造方法(默认创建方式,依赖set方法)
2、如果要使用有参构造创建对象(不依赖set方法)
(1)下标赋值
(2)类型赋值
(3)按形参名赋值
3、Spring加载beans.xml时,所有注册的对象都会被创建,且是单例模式
二、Spring-Setter
1、别名
2、bean的配置
id:唯一标识符
class:指定类
name:别名,比alias更好用,可以取多个别名,用空格、分号、逗号隔开
3、import
多用于团队开发,合并多个配置文件
三、依赖注入
1、构造器注入
见一、2
2、Set方式注入
依赖:bean对象的创建依赖于容器
注入:bean对象的所有的属性,由容器来注入
3、拓展方式注入
p命名空间
c命名空间
4、bean的作用域
(1)单例模式,Spring默认机制,相同对象共用一个对象
显试标明:在bean标签中加入scope="true"
(2)原型模式,每次在容器中get,都会创建一个新对象
scope="prototype"
(3)其余的request、session、application只能在web可开发中使用到
四、Bean的自动装配
自动装配是Spring满足bean依赖的一种方式
Spring会在上下文中自动寻找,并自动给bean装配属性
Spring的三种装配方式
(1)Xml中显式配置
(2)Java中显式配置
(3)隐式自动装配*
测试自动装配
(1)ByName自动装配
(2)byType自动装配
(4)使用注解自动装配
a、导入约束:
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
b、配置注解的支持:
c、@Autowired直接在属性在加,也可以在set上加
d、使用Autowired可以不用编写set方法,前提是这个属性IOC容器中存在
e、当注入在IOC容器中该类型只有一个时,就通过byType,当容器中存在多个同一类型对象时,就通过byName(此时要用@Qualifier(value="bean id"))
f、@Resource和@Autowired都是自动装配,Autowired是先byType,但Resource是默认先byname
(5)@Component加在类前面,说明被Spring接管了,再在bean.xml中加入 ,就可以自动扫描接管,用小写的类名取用对象
(6)@Component有几个衍生注解(即等价的注解,只是名字不一样,仅用于区分使用的地方):
a、dao:【@Repository】
b、service:【@Service】
c、controller:【@Controller】
d、bean:【@Component】
(7)使用注解标注单例或多例:@Scope()
总结:
xml与注解:
xml更加万能,适用于任何场景,维护简单方便
注解不是自己的类是用不了,维护相对复杂
最佳实践:
xml用来管理bean
注解只负责属性的注入
使用过程中,只需要注意:必须要让注解生效,就需要开启注解支持:
使用Java的方式配置Spring (Java Config)
即完全不适用Spring的xml配置,完全交给Java
/申明是配置类
@Configuration
//自动扫描,默认开启
@ComponentScan("com.pzb.pojo")
//合并配置
@import(PzbConfig2.class)
public class PzbConfig {
//注册一个bean,相当于xml中的bean标签
//方法名相当与xml中bean标签中的id
//这个方法中的返回值类型,就相当于标签中的class
@Bean
public User User(){
User user = new User();
user.setName("111");
System.out.println("1");
return user;//返回要注入的对象
}
}
五、代理模式
1、角色分析:
抽象角色:一般会使用接口或者抽象来解决
真实角色:被代理的角色
代理角色:代理真实角色,代理真实角色之后,我们一般会做一些附加操作
客户:访问代理对象的人
2、代理模式的优劣:
优点:
(1)、可以使真实角色更加纯粹,不用关心公共业务
(2)、公共业务交给代理角色,实现业务的分工
(3)、公共业务发生拓展,方便集中管理
(4)、一个动态代理类,代理的是一个接口,一般是就对应的一类业务
(5)、一个动态代理类可以代理多个类,只要实现同一个接口
缺点:
(1)一个真实角色就会产生一个代理,代码量会翻倍
3、动态代理
动态代理和静态代理角色是一样的
动态代理类是动态生成的,不由我们写
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
基于接口--JDK动态代理*
基于类:cglib
Java字节码实现:Javasist
需要了解的两个类:Proxy,InvocationHandler:调用处理程序
proxy:提供创建动态代理类的(静态)方法
invocationhandler:处理代理实例,返回结果
六、AOP
1、导入包
org.aspectj
aspectjweaver
2、Spring实现AOP
(1)方式一,使用Spring的接口