Spring - 在ioc容器中装配bean

网友投稿 554 2022-05-30

Spring对过去Bean配置文件的冗长性做出了很多重大改进,很多冗长的配置现在有了简介的版本。并提供了多种配置方式,既可以使用其中的一种配置,也可以混合使用多种配置。

Spring容器启动条件:

Spring框架的类包都在应用程序的类路径下

应用程序为Spring提供完备的Bean配置信息

Spring - 在ioc容器中装配bean

Bean的类都已经放到了应用程序的类路径下

Bean的元数据信息包括:

Bean的实现类

Bean的属性信息,资源连接数,用户名密码等

Bean的依赖关系

Bean的行为配置

基于xml文件的配置

文件头声明比较复杂,默认命名空间,xsi标准命名空间,自定义命名空间,并为每个命名空间指定Schema文件,以xsd结尾

Schema文档格式定义文件语法:

Spring中装配一个Bean。容器通过getBean(“foo”)即可得到相应的Java Bean

Spring中不能出现相同的id,但是可以出现相同的name,同name后面覆盖前面的。

依赖注入:三种方式,属性注入,构造函数注入,工厂方法注入

属性注入:

最常用,可选择性高,灵活性高

属性注入要求Bean提供默认构造函数及需要注入属性的Setter方法。先调用默认构造器构造对象,再通过反射调用Setter方法进行属性值的注入。

注意property name=“xxx”和Bean内部属性名xxx的一致性

属性命名规则:变量的前两个字母要么全部大写,要么全部小写。

构造函数注入:通过不同的构造方法属性实现注入。

循环依赖问题:如果两个Bean采用构造函数注入,并且通过构造函数互相入参引用对方,就会发生类似死锁的循环引用问题。

工厂方法配置不经常使用,正在逐渐淡出人们的视野。

字面值:指可以用字符串表示的值,这些值可以通过标签进行注入。默认情况下基本数据类型及其封装类,String类等都可以采用字面值注入的方式。对Boss类引用Car属性并添加依赖关系。

Package com.baobaotao.attr; Public class Boss{ Private Car car; Public void setCar(Car car){ This.car = car; } }

1

2

3

4

5

6

7

8

Boss的Bean通过元素引用car Bean,建立起boss对car的依赖。

1

2

3

4

5

6

元素通过以下三个属性引用容器中其它Bean。

:该属性引用同一容器或者父容器的Bean

:只能引用同一配置文件中定义的Bean

:引用父容器中的Bean

内部Bean类似于java匿名内部类,不会被其他任何Bean引用。

如果需要注入null值,应当为

等同于调用car.setBrand(null)的方法。

级联属性:采用以下注入方式:

1

2

3

同时需要在Boss的对象元素内部设置

Private Car car = new Car();

否则将在Spring级联配置的过程中抛出NullValueInNestedPathException

Spring为List,Map,Properties提供了配置方式。

同时也可以采用简化配置方式进行简化配置处理。

使用p命名空间

1

P:属性名=xxx

自动装配:

autowire=“<自动装配类型>”

四种byName,根据名字

ByType根据属性,比如Car类型

Constructor针对构造函数输入而言的

Autodetect自动装配,自动识别,在byName,byType和construstor

方法注入,使Boss可以每次通过getCar()都返回一个新的Car对象。

Lookup可以实现动态的注入。

replacer可以实现方法替换,一种很魔术的功能。

通过parent属性实现Bean的继承

通过实现依赖,也可以通过depends-on属性来进行依赖管理。

Idref可以用来实现引用

Bean的作用域:singleton,prototype,request,session,globalSession

配置scope=“<作用域类型>”

基于注解的配置。@Component(“userDao”)

也有等效于@Component的注解

@RespositoryL用于对DAO实现类进行标注

@Service:用于对Service实现类进行标注

@Controller: 用于对Controller实现类进行标注

使用@Autowired注解,当且仅当有一个对应匹配的Bean的时候,就会被注入到变量中。

通过require属性,可以在require=false时找不到也不会报错

Spring 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ThinkPHP 视频学习教程
下一篇:GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
相关文章