Spring自动装配
- @Autowired
- @Autowired + @Qualifier
- @Resource
- @Inject
@Autowired原理 : 先按照类型自动装配,如果找到一个装配成功,如果没找到报NoSuchBeanDefinitionException错,如果找到多个先按照变量名做为id进行匹配,如果成功就成,如果匹配失败就 Error creating bean with name ‘id名’,Autowired是spring自身的 ,他离开了spring将无法使用
@Qualifier的原理:按照名字注入,能解决再多个类型相同的情况下,按照指定名字进行注入
@Resource的原理 :先根据名字查找,如果有名字根据名字查找,如果没有名字根据类型查询,也可以通过name或type属性指定根据名字或类型找,他是Java规范的,他的扩展性比Autowired的扩展性强。
@Inject的原理 : 他使用之前需要导包,或者导入maven依赖,默认根据类型进行匹配。
Inject的maven依赖
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
案例 @Autowired + @Qualifier
xml (xml 的作用 只要就是用来扫描注解所再的包)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描com.stone.dome包下的所有注解 -->
<context:component-scan base-package="com.stone.dome"/>
</beans>
BookDao
@Repository
public class BookDao
{
public void saveBook(){
System.out.println(" BookDao --- > 图书成功");
}
}
BookService (把bean的名字改了)
@Service("bookService1")
public class BookService
{
@Autowired
private BookDao bookDao;
public void saveBook(){
System.out.println(" BookService --- >图书正再添加...");
bookDao.saveBook();
}
}
BookServlet
@Controller
public class BookServlet
{
@Autowired
@Qualifier("bookService1") // 指定BookService的bean id
private BookService bookService;
public void saveBook(){
bookService.saveBook();
}
}
测试代码
public class SpringIocDome2
{
private ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test2(){
BookServlet bookServlet = ioc.getBean("bookServlet", BookServlet.class);
bookServlet.saveBook();
}
}
BookService2 (他的作用主要就是实现bookService拥有多个类型,体现出@Qualifier 注解的作用)
@Component
public class BookService2 extends BookService
{
}
运行结果
还没有评论,来说两句吧...