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(代理)
浙公网安备 33010602011771号