<!--setter注入: 不关注类是否存在这个属性,只关注是否存在这个setter方法,setter方法名称为set拼上property的name首字母大写,并将后面的值赋给setter方法中的形参-->
<!-- bean下面property的ID首字母大写,前面拼上set,形成setter方法,在该bean中必须存在。-->
<!-- value是后面形参变量的值-->
<!--Setter手动赋值,ref引用注入-->
<bean id="student1" class="com.yq.shoudong.Student">
<property name="name" value="yq"/>
<property name="age" value="10"/>
</bean>
<bean id="school1" class="com.yq.shoudong.School">
<property name="name" value="yq"/>
<property name="address" value="南京"/>
<!-- 引用类型赋值 ref与赋值bean的id一致 -->
<property name="student" ref="student1"/>
</bean>
<!--Setter自动注入 byName、byType、constructor-->
<!--byName自动注入-->
<!--引用类型的自动注入,spring框架根据某些规则可以给引用类型赋值 -->
<!-- 使用规则常用的是byName byType
1、byName (按名称注入):Java类中引用类型的属性名和spring容器中的(配置文件)<bean>的ID名称一样,
且数据类型一致,spring能赋值引用类型
语法规则:
<bean id=xxx class=xxx autowired=byName/>
-->
<bean id="student" class="com.yq.autowired.Student">
<property name="name" value="yq"/>
<property name="age" value="10"/>
</bean>
<bean id="school" class="com.yq.autowired.School" autowire="byName">
<property name="name" value="yq"/>
<property name="address" value="南京"/>
</bean>
<!--byType自动注入-->
<!--在使用类型注入,只能有一个类型注入-->
<!--1、直接按类型注入-->
<!-- <bean id="studentByType1" class="com.yq.autowiredByType.Student">-->
<!-- <property name="name" value="yx"/>-->
<!-- <property name="age" value="10"/>-->
<!-- </bean>-->
<!--2、按子类型注入-->
<!-- <bean id="Monitor" class="com.yq.autowiredByType.Monitor">-->
<!-- <property name="name" value="子类型注入"/>-->
<!-- <property name="age" value="10"/>-->
<!-- </bean>-->
<!--3、按实现类注入-->
<bean id="aClass" class="com.yq.autowiredByType.ClassImp">
<property name="id" value="实现类注入"/>
</bean>
<bean id="schoolByType1" class="com.yq.autowiredByType.School" autowire="byType">
<property name="name" value="nanda"/>
<property name="address" value="南京"/>
</bean>
<!--constructor 自动注入-->
<!--School构造函数包含 ClassImp类型参数-->
<bean id="aClass" class="com.yq.autowiredByType.ClassImp">
<property name="id" value="实现类注入"/>
</bean>
<bean id="school" class="com.yq.autowiredByType.School" autowire="constructor ">
<property name="name" value="nanda"/>
<property name="address" value="南京"/>
</bean>
//构造器注入
<!--构造器注入与setter注入有差别,构造器注入时,name必须和构造器中的形参名称保持一致-->
<!--构造器注入必须使用constructor标签,并且可以使用三种注入方式,name、index(属性在构造器中的顺序)、直接写value,一切标准按照构造器方法中的参数列表为基础-->
<!--index是指形参的位置-->
<bean id="school1" class="com.company.pa02.School">
<constructor-arg name="name" value="东南大学"/>
<constructor-arg name="address" value="南京"/>
<constructor-arg name="student" ref="student"/>
</bean>
//注入是必须有构造器访问和编辑方法即getter和setter
当引用其他对象,进行构造器注入时,注意class类型是接口是实现类或者继承父类的子类,注意此处构造的是无参构造器。
当创建自身构造,注意使用name、value,进行形参赋值
<bean id="UserService" class="com.nodePower.service.impl.UserServiceImp">
<constructor-arg ref="userDao"/>
</bean>
<bean id="userDao" class="com.nodePower.dao.impl.UserDaoImp"/>
spring bean的Setter注入(手动、自动)和构造器注入
最新推荐文章于 2023-04-11 18:32:34 发布