6.4、bean的作用域
1、代理模式(Spring默认机制)
2、原型模式,每次从容器中get的时候,都会产生一个新对象
3、其余的request、session、application、这些只能在web开发中使用。
7、bean的自动装配
○自动装配是Spring满足bean依赖的一种方式
○Spring会在上下文中自动寻找,并且自动给bean装配属性
在Spring中有三种自动装配的方式1
1、在xml中显示的配置
2、在Java中显式的配置
3、隐式的自动装配bean【重要】
7.1、测试
1、环境搭建
○一个人有两个chongwu
7.2、ByName自动装配
<!--byName:会自动在容器上下文中查找,和自己对象set方法的值对应的beanid-->
<bean id="people" class="com.muzi.pojo.People" autowire="byName">
<property name="name" value="小冉"/>
</bean>
7.3、ByType自动装配
<!--
byName:会自动在容器上下文中查找,和自己对象set方法的值对应的beanid
byType:会自动在容器上下文中查找,和自己对象属性类型对应的bean
-->
<bean id="people" class="com.muzi.pojo.People" autowire="byType">
<property name="name" value="小冉"/>
</bean>
小结:
byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致
bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性类型一致
7.4、使用注解实现自动装配
要使用注解的支持:
1.导入约束: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" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启注解支持-->
<context:annotation-config/>
</beans>
@Autowired
直接在属性上使用,也可以在set方式上使用
使用Autowired我们可以不用编写Set方法,前提是你这个自动装配的属性在ioc容器中存在,且符合名字byname
@Autowired
private Cat cat;
@Autowired
private Dog dog;
private String name;
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,
我们可以使用@Qualifier(value=“XXX”)去配置@Autowired的使用,指定一个唯一的bean对象注入
8、使用注解开发
10、代理模式
为什么要学习代理模式?【SpringAOP和StringMVC】
代理模式的分类:
○静态代理
○动态代理
10.1、静态代理
角色分析:
○抽象角色:一般会使用接口或者抽象类来解决
○真实角色:被代理的角色
○代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
○客户:访问代理对象的人
代码步骤:
1、接口
//租房
public interface Rent {
public void rent();
}
2、真实角色
//房东
public class Host implements Rent {
public void rent(){
System.out.println("房东要出租房子");
}
}
3、代理角色
public class Proxy implements Rent{
private Host host;
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
public void rent(){
seeHouse();
host.rent();
hetong();
fare();
}
//看房
public void seeHouse(){
System.out.println("中介带你看房");
}
//收中介费
public void fare(){
System.out.println("收中介费");
}
//合同
public void hetong(){
System.out.println("签租领合同");
}
}
4、客户端访问代理角色
public class Client {
public static void main(String[] args){
Host host = new Host();
//代理
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
代理模式的好处:
○可以使真实角色的操作更加纯粹,不用关注一些公共的业务。
○公共业务交给代理角色,实现了业务的分工。
○公共业务发生扩展的时候,方便集中管理。
缺点:
○一个真实角色就会产生一个代理角色,代码量翻倍
10.2、加深理解
10.3、动态代理
○动态代理和静态代理角色一样
○动态代理的代理类是动态生成的,不是直接写好的
○动态代理分为两大类:基于接口的动态代理,基于类的动态代理
○基于接口的动态代理–JDK动态代理
○基于类的动态代理–cglib
○java字节码实现:javasist
需要了解两个类:Proxy,InvocationHandler:调用处理程序
11、AOP
11.1、什么是AOP
11.2、AOP在Spring中的作用
11.3、使用Spring实现AOP
使用AOP,需要导入一个依赖包
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
方式一:使用Spring的Api接口
方式二:自定义来实现AOP
方式三:使用注解实现AOP
12、整合Mybatis
步骤:
1、导入相关jar包
○junit
○mybatis
○mysql数据库
○spring相关的
○aop植入
○mybatis-spring
2、编写配置文件
3、测试
12.1、回忆mybatis
12.2、Mybatis-spring
1.编写数据源配置
2.sqlSessionFactory
3.sqlSessionTemplate
4.需要给接口加实现类
5.将自己写的实现类,注入到Spring中
6.测试使用
13、声明式事务
1、回顾事务
○要么都成功,要么都失败
○事务在项目中,十分重要。
事务ACID原则:
○原子性
○一致性
○隔离性
○持久性
2、spring中的事务管理
○声明式事务:AOP
○编程式事务:需要在代码中,进行事务的管理
转载:https://blog.csdn.net/l13kddd/article/details/104698305