Bean有三种装配方式
1.基于xml的装配(分为构造注入和设值注入)
生成一个People类
package com.dl.entity;
public class People {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public People() {
}
public People(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
通过xml文件对bean构造注入
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="people" class="com.dl.entity.People">
<constructor-arg index="0" value="li"></constructor-arg>
<constructor-arg name="age" value="12"></constructor-arg>
</bean>
</beans>
测试类
public class Test {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
Object people = ac.getBean("people");
System.out.println(people);
}
}
2自动装配bean
Spring实现自动装配两个步骤:
组件扫描:@Component注解
自动装配(autowiring):Spring自动满足bean之间的依赖。
@Component:表明这个类作为组件类,并告知Spring要为这个类创建bean。默认bean的id为第一个字母为小写类名,可以用value指定bean的id。
@Configuration:代表这个类是配置类。
@ComponentScan:启动组件扫描,默认会扫描所在包以及包下所有子包中带有@Component注解的类,并会在Spring容器中为其创建一个bean。可以用basePackages属性指定包。
@RunWith(SpringJUnit4ClassRunner.class):以便在测试开始时,自动创建Spring应用上下文。
@ContextConfiguration:告诉在哪加载配置。
@Autowired:将一个类的依赖bean装配进来。
创建一个接口
public interface Chifan {
void eat();
}
创建吃饭的实现类
@Component
public class ChifanImpl implements Chifan {
@Override
public void eat() {
System.out.println("吃鱼");
}
}
3通过java代码装配bean
配置类
@Configuration
public class Config {
@Bean
public void getchifan(){
new ChifanImpl();
}
}
测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class Test {
@Autowired
private Chifan chifan;
@org.junit.Test
public void test(){
chifan.eat();
}
}