0
点赞
收藏
分享

微信扫一扫

Spring配置文件中Bean标签的解析即依赖注入

佛贝鲁先生 2022-04-13 阅读 98
spring

maven使用Spring核心包的坐标

<!-- Spring核心jar包 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.5.RELEASE</version>
	<scope>provided</scope>
</dependency>

Bean标签:
用于配置对象交由Spring来创建
默认情况下创建对象是使用无参构造,如果没有无参构造函数就是无法创建

基本属性:
    id:唯一标识
    class:Bean的全限定名(类的全类名)

其他属性

scope:指对象的作用范围:

属性值作用范围
singleton默认值,单例的;对象只有一个
prototype多例的;每一个使用多会创建一个新的对象
requestweb项目中,Spring创建一个Bean对象,并将对象存入到request域中
sessionweb项目中,Spring创建一个Bean对象,并将对象存入session域中
global sessionweb项目中,应用在Portlet环境中,如果没有Protlet环境那么globalSession相当于session

Bean配置对象创建时机

Bean标签配置对应的初始化方法和销毁方法
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁的方法名称
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

依赖注入

依赖注入它是Spring框架核心IOC的具体实现;可以理解为将持久层传递给业务层,但是这个过程是交由Spring来完成的
有两大注入范式:
1、通过属性的set方法进行注入
2、通过类的构造方法进行注入

set方式进行对象的注入

<!-- Spring的核心配置文件 -->
<bean id="userDao" class="com.lenjing.dao.impl.UserDaoImpl"></bean>
<bean id="serverUser" class="com.lenjing.server.ServerUserImpl">
	<property name="userDao" ref="userDao"></property>
</bean>

实现原理:通过反射,进行字符串拼接找到对应的方法进行调用完成注入
解析:
    property标签中属性name不是要注入类的bean标签的id,是要注入类的set方法的后部分开头小写;如这里:在ServiceUserImpl中UserDao类的注入set方法是setUser,那么在标签中name属性就应该是user
    ref属性就是要注入对象的Bean标签中的id值
在这里插入图片描述

注:单例模式或多例并不会影响到注入

set方式进行普通属性的注入

<!-- Spring的核心配置文件 -->
<bean id="userDao" class="com.lenjing.dao.impl.UserDaoImpl"></bean>
<bean id="serviceUser" class="com.lenjing.service.ServiceUserImpl">
	<property name="userDao" ref="userDao"></property>
	<property name="name" value="zhangshan"></property>
	<property name="age" value="18">
</bean>

解析:
    name属性表示类中set方法后的字段,value则是要进想注入的值

set方式集合的注入

<!-- properties类型: -->
<property name="properties">
	<props>
		<prop key="k1">1</prop>
		<prop key="k2">2</prop>
		<prop key="k3">3</prop>
	</props>
</property>
<!-- map类型: -->
<property name="map">
	<map>
		<entry key="n1" value="1111"></entry>
		<entry key="n2" value="2222"></entry>
	</map>
</property>
<!-- list类型: -->
<property name="list">
	<list>
		<value>123</value>
	</list>
</property>

通过构造方法进行注入

<bean id="serverUserDao "class="com.lenjing.ServerUserDao">
	<constructor-arg name="userDao" ref="userDao"></constructor-arg>
	<constructor-arg name="name" value="zhangshan"></constructor-arg>
	<constructor-arg name="age" value="18"></constructor-arg>
</bean>

解析:这里的name代表构造方法的形参名,ref代表bean标签id进行引用注入,value是普通属性注入

举报

相关推荐

0 条评论