UserDaoImpl.java
import org.springframework.stereotype.Repository; @Repository public class UserDaoImpl implements UserDao{ @Override public void add() { System.out.println("UserDao add......"); } }
测试类
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.testng.annotations.Test; public class TestDemo { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userService", UserService.class); userService.doAnyThing(); } }
4.3 @Qualifier注解演示
在自动装配注解演示中,尝试一个接口有多个实现类时,引发了异常。这就需要@Qualifier注解和@Autowire注解配合来解决了!
@Autowire根据类型进行自动装配,但是一个接口可以有多个实现类!Spring对此表示疑惑,并不清楚该拿哪个实现类进行装配,可不就引发异常了吗!
通过@Qualifier注解,可以指定名称,告诉Spring使用哪个具体的实现类!
我们在上述演示代码的基础上添加一个UserDao的实现类UserDaoImpl2:
public class UserDaoImpl2 implements UserDao{ @Override public void add() { System.out.println("UserDao2 add......"); } }
此时如果想要将该实现类装配到UserService的UserDao类型的属性中,需要如下两步:
1.先给该实现类添加注解,可以设定value,也可以使用默认,默认为类名首字母小写的值,即name=userDaoImpl2
2.在UserService类中UserDao属性上添加@Qualifier注解,并指定名称!
3.测试后,可以正常访问到该实现类的方法。
4.4 @Value注解演示
@Value(value = "黄小黄") String name;
5 纯注解的开发模式
在这里只需要大概体会一下即可,实际使用SpringBoot,简化Spring。
在本篇案例中,我们首先在配置文件中进行了配置:
而在纯注解开发模式中,根本不需要写配置文件,而是 拿配置类代替:
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration //作为配置类,替代xml配置文件 @ComponentScan(basePackages = {"com.ithxh.spring5"}) public class SpringConfig { }
其余代码不变,更改测试类:
@Test public void test(){ ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean("userService", UserService.class); userService.doAnyThing(); }