用Idea学习Spring框架第二天(完结撒花)

6.4、bean的作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2X45to1G-1583482370880)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1583454705174.png)]

​ 1、代理模式(Spring默认机制)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4w23kx3-1583482370881)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1583454904471.png)]

​ 2、原型模式,每次从容器中get的时候,都会产生一个新对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4gFbiqr-1583482370881)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1583455028465.png)]

​ 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对象注入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xoPqz76-1583482370883)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1583458390855.png)]

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、加深理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X64ZGLWc-1583482370884)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1583463068720.png)]

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

○编程式事务:需要在代码中,进行事务的管理

发布了38 篇原创文章 · 获赞 38 · 访问量 2736

猜你喜欢

转载自blog.csdn.net/l13kddd/article/details/104698305