1.autowired注释,它一般用于一个类需要其它类注入的时候
首先需要在xml文件中配置 <context:annotation-config/>
(1)@Autowired在set方法上设置,代替了set注入,不用再设置property
private teacher teacher;
@Autowired
public void setTeacher(teacher teacher) {
this.teacher = teacher;
}
public void check(){
teacher.spring();
}
(2)直接在属性上设置,代替set方法
@Autowired
private teacher teacher;
public void check(){
teacher.spring();
}
(3)也可以在构造函数中设置,这里不演示了
2.Qualifire注释:当需要注入的类存在多个版本的配置,这是需要autowired与qualifire一起使用,它的作用是指定需要哪个版本的配置。
xml配置:
<context:annotation-config/>
<bean id="student" class="com.shuai.hello.student">
<property name="name" value="lishuai"></property>
<property name="age" value="12"></property>
</bean>
<bean id="student2" class="com.shuai.hello.student">
<property name="name" value="liqian"></property>
<property name="age" value="12"></property>
</bean>
<bean name="teacher" class="com.shuai.hello.teacher"></bean>
需要注入的类:
public class teacher {
@Autowired
@Qualifier("student2")
private student student;
public void printName(){
System.out.println(student.getName());
}
public void printAge(){
System.out.println(student.getAge());
}
}
测试:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
teacher teacher = (teacher) applicationContext.getBean("teacher");
teacher.printName();
teacher.printAge();
3.(1)基于java的注释:@Configuration和@Bean,这两个注释代替了在xml文件中配置bean的一个操作。
@Bean指定的方法的返回值,对应的是向spring容器中注入该类型的类
@Configuration
public class testConfig {
@Bean
public person testperson(){
return new person();
}
}
测试:一旦定义了配置类就需要AnnotationConfigApplicationContext实现类需要testConfig.class的配置
public static void main(String[] args) {
ApplicationContext application=new AnnotationConfigApplicationContext(testConfig.class);
person person=application.getBean(person.class);
person.say();
(2)当存在一个类需要依赖与其它类的时候,@Configuration和@Bean,也可以解决,它是通过构造方法的形式传入所需要的依赖类
配置类:
@Configuration
public class testConfig {
@Bean
public Tr testTr(){
return new Tr(testTe());
}
@Bean
public Te testTe(){
return new Te();
}
}
对应的bean:
package com.shuai.hello;
public class Tr {
private Te te;
public Tr(Te te) {
System.out.println("lallal");
this.te=te;
}
public void print(){
te.printTe();
}
public class Te {
public void printTe(){
System.out.println("我要打印");
}
}
测试:
ApplicationContext application=new AnnotationConfigApplicationContext(testConfig.class);
Tr tr=application.getBean(Tr.class);
tr.print();
4.@import注解,因为ApplicationContext application=new AnnotationConfigApplicationContext(testConfig.class);中只能配置一个配置类
使用@import可以导入其它的配置类并且将类注入到容器中
@Configuration
@Import(testConfig2.class)
public class testConfig {
@Bean
public Tr testTr(){
return new Tr();
}
@Configuration
public class testConfig2 {
@Bean
public Te testTe(){
return new Te();
}
网友评论