Spring-02

3.拓展方式注入

<!--    p命名空间注入,可以直接注入属性的值-->
    <bean id="user" class="com.lm.pojo.User" p:name="赖敏" p:age="99"/>
<!--c命名空间注入,通过构造器注入:constructs-->
    <bean id="user2" class="com.lm.pojo.User" c:age="190" c:name="你爸爸"/>

注意;需要导入xml约束。

xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"

4.Bean作用域

1.单例模式(Spring的默认模式)(永久一个对象)

<bean id="user2" class="com.lm.pojo.User" c:age="190" c:name="你爸爸" scope="singleton"/>

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

<bean id="user2" class="com.lm.pojo.User" c:age="190" c:name="你爸爸" scope="prototype"/>

3.其余request、session、application。只可以在web使用。

7.Bean的自动装配

自动装配式Spring满足bean依赖的一种方式!

Spring会在上下文中自动寻找,冰自动给bean装配属性!

再spring中有三种装配的方式

1.在xml中显示的配置

2,在java中显示配置

3.隐示的自动装配bean

1.测试环境搭配

一个人,两个宠物

2.ByName自动装配

<bean id="people" class="com.lm.pojo.People" autowire="byName">
    <property name="name" value="赖敏"/>

3.ByType自动装配

<bean id="people" class="com.lm.pojo.People" autowire="byType">
    <property name="name" value="赖敏"/>

4.小结

ByName的时候,需要保证所有的Bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致

ByType的时候,需要保证所有的Bean的class唯一,并且这个Bean需要和自动注入的属性的类型一致。

5.使用注解实现自动装配

@Autowried直接在属性上使用即可,也可以在set方式上使用!

使用Autowired我们可以不在使用set方法,前提是自动装配的属性在IOC容器中

@Autowired
private Cat cat;
@Autowired
private Dog dog;

8.使用注解开发

1.bean

<?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.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.lm.pojo"/>
    <context:annotation-config/>
</beans>

2.属性如何注入

public class User {
    @Value("小魔女")
    public String name;
}

3.衍生的注解

@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!

dao @Repository

service @Service

controller @Controller

这四个注解都是一样的功能,都是代表将某个类注册到Spring中,装配Bean

4.自动装配置

5.作用域

@Scope

6.小结

xml与注解:

xml更加万能,适用于任何场景,维护简单方便!

注解,不是自己的类使用不了。

9.使用java的方式配置Spring

javaConfig是Spring的一个子项目

10.代理模式

为什么要学习代理模式?因为这是SpringAOP的底层!

代理模式分类:

静态代理

动态代理

1.静态代理

  • 抽象角色:一般会使用接口或者抽象类来解决

  • package com.lm.demo01;
    
    public interface Rent {
        public void rent();
    }
    
  • 真实代理:被代理的角色

    package com.lm.demo01;
    
    public class Host implements Rent{
        @Override
        public void rent() {
            System.out.println("房东要出租房子!");
    
        }
    }
    
  • 代理角色:代理真是角色,代理真实角色后,我们一般会做一些附属操作

  • package com.lm.demo01;
    
    public class Proxy implements Rent{
        private Host host;
    
        public Proxy() {
        }
    
        public Proxy(Host host) {
            this.host = host;
        }
        public void rent(){
            host.rent();
            fare();
            this.seeHouse();
        }
    
    //    看房
        public void seeHouse(){
            System.out.println("中介带你看房子!");
        }
    
    
    //    收中介费用
    public void fare(){
        System.out.println("中介收中介费!");
    }
    }
    
  • 客户:访问代理对象的人

  • package com.lm.demo01;
    
    public class Client {
        public static void main(String[] args) {
            Host host = new Host();
            Proxy proxy = new Proxy(host);
            proxy.rent();
    
        }
    }
    

好处:

  • 可以使真实角色的操作更加存粹,不用去关注一些公共的业务!
  • 公共也就交给代理角色,实现了业务的分工!
  • 公共业务发生拓展的时候,方便集中管理!

缺点:

  • 一个真是角色就会产生一个代理角色,代码量会翻倍,开发效率降低!

2.动态代理

动态代理和静态代理角色一样

动态代理的代理类是动态生成的,不是我们直接写好的!

动态代理分为两大类:基于接口的动态代理,基于类的动态代理!

  • 基于接口----JDK动态代理

  • 基于类:cglib

  • java字节码实现

需要了解两个类;Proxy(代理)

posted @ 2022-07-27 20:51  落日归山河  阅读(45)  评论(0)    收藏  举报