Bean的自动装配定义:在Spring配置文件不需要配置JavaBean之间的依赖关系,如 property、constructor-arg
- Spring IOC容器可以在上下文中自动寻找,实现自动装配Bean。
- 在Spring中有三种装配方式:xml中配置、java中配置、隐式的自动装配(重要)
1.创建实体类
三个实体类:Goods(商品)、Providers(供应商)、Brands(品牌)
package com.yy.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private String goodID;
private String goodName;
private String goodType;
private Brands brand;
private BigDecimal cost;
private Providers provider;
public Goods(String goodID, String goodName) {
this.goodID = goodID;
this.goodName = goodName;
}
}
package com.yy.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Providers {
private String providerID;
private String providerName;
private String address;
private String tel;
}
package com.yy.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Brands {
private String brandID;
private String brandName;
}
2.创建Bean.xml
在xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="provider" class="com.yy.pojo.Providers">
<property name="address" value="zj"></property>
<property name="providerID" value="p001"></property>
<property name="providerName" value="小h"/>
<property name="tel" value="13812355581"/>
</bean>
<bean id="brand" class="com.yy.pojo.Brands">
<property name="brandID" value="b001"/>
<property name="brandName" value="sevenRB"/>
</bean>
<bean id="goods" class="com.yy.pojo.Goods">
<property name="goodID" value="z001"/>
<property name="goodName" value="主板"/>
<property name="cost" value="2000"/>
<property name="goodType" value="硬件"/>
<property name="brand" ref="brand"/>
<property name="provider" ref="provider"/>
</bean>
</beans>
3.测试类
import com.yy.pojo.Goods;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanTest {
@Test
public void myTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("AplicationContext.xml") ;
Goods goods = context.getBean("goods", Goods.class);
System.out.println(goods);
}
}
- 通过ByName自动装配。
ByName会自动在容器中上下文查找和自己对象的set方法后面的值对应的Bean的id,但需保证id是唯一的。
<bean id="goods" class="com.yy.pojo.Goods" autowire="byName">
<property name="goodID" value="z001"/>
<property name="goodName" value="主板"/>
<property name="cost" value="2000"/>
<property name="goodType" value="硬件"/>
</bean>
- 通过ByType自动装配。
ByType会自动在容器中上下文查找和自己对象属性类型相对应的Bean,但必须保证这个类型Class全局唯一。
<bean id="goods" class="com.yy.pojo.Goods" autowire="byType">
</bean>
- 使用注解自动装配
1.导入约束
2.配置注解的支持context:annotation-config
<beans
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
context:annotation-config /> //或者<component-scan />
</beans>
3.@Autowired
直接在属性或者Set方法上使用。
package com.yy.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private String goodID;
private String goodName;
private String goodType;
@Autowired
private Brands brand;
private BigDecimal cost;
@Autowired(required = false)
private Providers provider;
public Goods(String goodID, String goodName) {
this.goodID = goodID;
this.goodName = goodName;
}
}
通过@Qualifier(value="")注解可以配置@Autowired指定一个唯一的bean对象注入
@Resource注解同样可以实现,Java的原生注解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)