这是文件的位置图
一、自动装配
bean文件头里面要加入context
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:http="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
这里的bean简写了很多,想了解全部代码的话,看我账号里关于spring的分栏就能找到了,最后一篇文章里。
<bean id="user" class="cn.itnanls.User">这句代码里我把autowire="byName"给删掉了,bean里面关于address的注入我也注销了,这时候要怎么做会自动装配呢?
<bean id="address" class="cn.itnanls.Address">
<property name="addressInfo" value="北京八大胡同"/>
</bean>
<bean id="user" class="cn.itnanls.User">
<!-- 基本属性注入 -->
<property name="name" value="lucy"/>
<!-- 引用类型注入 -->
<!--<property name="address" ref="address"/>-->
</bean>
第一种:
在User类里面给address加上注解@Autowired,@Autowired是根据Type进行自动装配的
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private String name;
// 根据Type注入
@Autowired
private Address address;
//爱好
private String[] hobbies;
//职务
private List<String> duties;
//家庭关系
private Map<String,String> familyTies;
//购物车商品
private Set<String> carts;
// 工作经历
private Properties workExperience;
// 女儿 null注入
private String daughter;
}
第二种:
假如我们现在有两个address
<bean id="address" class="cn.itnanls.Address">
<property name="addressInfo" value="北京三大胡同"/>
</bean>
<bean id="address2" class="cn.itnanls.Address">
<property name="addressInfo" value="北京八大胡同"/>
</bean>
直接测试是会报错的,所以我们要在@Autowired下加上另一个注解:@Qualifier("address"),引号里面是我们想要的测试的那个address
@Autowired
@Qualifier("address")
private Address address;
测试一下,地址就出来了:
第三种:
根据名字进行装配
@Resource(name = "address")
private Address address;
二、代码注入bean
第一种:
如果我们的bean没有任何的状态,就使用@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
@Component
public class Address {
private String addressInfo = "王府井";
}
@AllArgsConstructor
@NoArgsConstructor
@Data
@Component
public class User {
private String name;
@Autowired
private Address address;
//爱好
private String[] hobbies;
//职务
private List<String> duties;
//家庭关系
private Map<String,String> familyTies;
//购物车商品
private Set<String> carts;
// 工作经历
private Properties workExperience;
// 女儿 null注入
private String daughter;
}
application.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:http="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="cn.itnanls"/>
</beans>
测试时,王府井会被打印出来
第二种:
我们把上面加的@Component和王府井删掉,新建Beans类,引用注解@Configuration
@Configuration
public class Beans {
@Bean
public Address address(){
return new Address("万达广场");
}
@Bean
public User user(Address address){
User user = new User();
user.setName("jerry");
return user;
}
}
打印结果: