让我们看一下如何通过JavaConfig显式配置Spring(不用注解@ComponentScan)实战为主
这个例子是老师类和学生类,然后在老师类注入学生类。
1.学生和老师接口
package com.jack.bean.chatpter2.autowiredBeanJava;
public interface Teacher {
void teach();
}
package com.jack.bean.chatpter2.autowiredBeanJava;
public interface Student {
void learn();
}
2.学生和老师实现类(没有@Component注解)
package com.jack.bean.chatpter2.autowiredBeanJava;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
public class StudentXiaoMing implements Student{
Logger logger = LoggerFactory.getLogger(StudentXiaoMing.class);
@Override
public void learn() {
logger.info("小明同学正在学习");
}
}
package com.jack.bean.chatpter2.autowiredBeanJava;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
public class TeacherWang implements Teacher {
private Student student;
public TeacherWang(Student student){
this.student = student;
}
Logger logger = LoggerFactory.getLogger(TeacherWang.class);
@Override
public void teach() {
logger.info("王老师在教学");
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
3.java配置类
package com.jack.bean.chatpter2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.jack.bean.chatpter2.autowiredBeanJava.Student;
import com.jack.bean.chatpter2.autowiredBeanJava.StudentNiang;
import com.jack.bean.chatpter2.autowiredBeanJava.StudentXiaoMing;
import com.jack.bean.chatpter2.autowiredBeanJava.Teacher;
import com.jack.bean.chatpter2.autowiredBeanJava.TeacherWang;
@Configuration
//注意这里没有@ComponentScan
public class TeacherConfig {
//通过@Bean 进行注入,如果没写参数name 返回出来bean就是方法名
@Bean
public Student student(){
return new StudentXiaoMing();
}
@Bean(name="teacher")
public Teacher teacher(Student student) {
return new TeacherWang(student());
}
}
4.测试类
package com.jack.bean.chatpter2;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.jack.bean.chatpter2.autowiredBeanJava.Student;
import com.jack.bean.chatpter2.autowiredBeanJava.TeacherWang;
//运行测试之前加载bean
@RunWith(SpringJUnit4ClassRunner.class)
//具体加载java配置类
@ContextConfiguration(classes=TeacherConfig.class)
public class TeacherTest {
@Autowired
private TeacherWang teacher;
@Test
public void teacher(){
Student student = teacher.getStudent();
student.learn();
}
}
5.效果