Spring学习笔记 (8)

2、新建一个config配置包,编写一个MyConfig配置类

@Configuration //代表这是一个配置类 public class MyConfig { @Bean //通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id! public Dog dog(){ return new Dog(); } }

3、测试

@Test public void test2(){ ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class); Dog dog = (Dog) applicationContext.getBean("dog"); System.out.println(dog.name); }

4、成功输出结果!

导入其他配置如何做呢?

1、我们再编写一个配置类!

@Configuration //代表这是一个配置类 public class MyConfig2 { }

2、在之前的配置类中我们来选择导入这个配置类

@Configuration @Import(MyConfig2.class) //导入合并其他配置类,类似于配置文件中的 inculde 标签 public class MyConfig { @Bean public Dog dog(){ return new Dog(); } }

关于这种Java类的配置方式,我们在之后的SpringBoot 和 SpringCloud中还会大量看到,我们需要知道这些注解的作用即可!

6.6、小结

XML与注解比较

XML可以适用任何场景 ,结构清晰,维护方便

注解不是自己提供的类使用不了,开发简单方便

xml与注解整合开发 :推荐最佳实践

xml管理Bean

注解完成属性注入

使用过程中, 可以不用扫描,扫描是为了类上的注解

<context:annotation-config/>

作用:

进行注解驱动注册,从而使注解生效

用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册

如果不扫描包,就需要手动配置bean

如果不加注解驱动,则注入的值为null!

7、静态/动态代理模式

代理模式

为什么要学习代理模式,因为AOP的底层机制就是动态代理!

代理模式:

静态代理

动态代理

学习aop之前 , 我们要先了解一下代理模式!

image-20210130132333533

7.1、静态代理

静态代理角色分析

抽象角色 : 一般使用接口或者抽象类来实现

真实角色 : 被代理的角色

代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .

客户 : 使用代理角色来进行一些操作 .

代码实现

Rent.java 即抽象角色

//抽象角色:租房 public interface Rent { public void rent(); }

Host.java 即真实角色

//真实角色: 房东,房东要出租房子 public class Host implements Rent{ public void rent() { System.out.println("房屋出租"); } }

Proxy.java 即代理角色

//代理角色:中介 public class Proxy implements Rent { private Host host; public Proxy() { } public Proxy(Host host) { this.host = host; } //租房 public void rent(){ seeHouse(); host.rent(); fare(); } //看房 public void seeHouse(){ System.out.println("带房客看房"); } //收中介费 public void fare(){ System.out.println("收中介费"); } }

Client.java 即客户

//客户类,一般客户都会去找代理! public class Client { public static void main(String[] args) { //房东要租房 Host host = new Host(); //中介帮助房东 Proxy proxy = new Proxy(host); //你去找中介! proxy.rent(); } }

分析:在这个过程中,你直接接触的就是中介,就如同现实生活中的样子,你看不到房东,但是你依旧租到了房东的房子通过代理,这就是所谓的代理模式,程序源自于生活,所以学编程的人,一般能够更加抽象的看待生活中发生的事情。

静态代理的好处:

可以使得我们的真实角色更加纯粹 . 不再去关注一些公共的事情 .

公共的业务由代理来完成 . 实现了业务的分工 ,

公共业务发生扩展时变得更加集中和方便 .

缺点 :

类多了 , 多了代理类 , 工作量变大了 . 开发效率降低 .

我们想要静态代理的好处,又不想要静态代理的缺点,所以 , 就有了动态代理 !

7.2、静态代理再理解

1、创建一个抽象角色,比如咋们平时做的用户业务,抽象起来就是增删改查!

//抽象角色:增删改查业务 public interface UserService { void add(); void delete(); void update(); void query(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspgwz.html