Spring自动装配

ゝ一世哀愁。 2023-07-03 02:48 221阅读 0赞
  1. @Autowired
  2. @Autowired + @Qualifier
  3. @Resource
  4. @Inject

@Autowired原理 : 先按照类型自动装配,如果找到一个装配成功,如果没找到报NoSuchBeanDefinitionException错,如果找到多个先按照变量名做为id进行匹配,如果成功就成,如果匹配失败就 Error creating bean with name ‘id名’,Autowired是spring自身的 ,他离开了spring将无法使用

@Qualifier的原理:按照名字注入,能解决再多个类型相同的情况下,按照指定名字进行注入

@Resource的原理 :先根据名字查找,如果有名字根据名字查找,如果没有名字根据类型查询,也可以通过name或type属性指定根据名字或类型找,他是Java规范的,他的扩展性比Autowired的扩展性强。

@Inject的原理 : 他使用之前需要导包,或者导入maven依赖,默认根据类型进行匹配。

Inject的maven依赖

  1. <dependency>
  2. <groupId>javax.inject</groupId>
  3. <artifactId>javax.inject</artifactId>
  4. <version>1</version>
  5. </dependency>

案例 @Autowired + @Qualifier
xml (xml 的作用 只要就是用来扫描注解所再的包)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context.xsd">
  8. <!-- 扫描com.stone.dome包下的所有注解 -->
  9. <context:component-scan base-package="com.stone.dome"/>
  10. </beans>

BookDao

  1. @Repository
  2. public class BookDao
  3. {
  4. public void saveBook(){
  5. System.out.println(" BookDao --- > 图书成功");
  6. }
  7. }

BookService (把bean的名字改了)

  1. @Service("bookService1")
  2. public class BookService
  3. {
  4. @Autowired
  5. private BookDao bookDao;
  6. public void saveBook(){
  7. System.out.println(" BookService --- >图书正再添加...");
  8. bookDao.saveBook();
  9. }
  10. }

BookServlet

  1. @Controller
  2. public class BookServlet
  3. {
  4. @Autowired
  5. @Qualifier("bookService1") // 指定BookService的bean id
  6. private BookService bookService;
  7. public void saveBook(){
  8. bookService.saveBook();
  9. }
  10. }

测试代码

  1. public class SpringIocDome2
  2. {
  3. private ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");
  4. @Test
  5. public void test2(){
  6. BookServlet bookServlet = ioc.getBean("bookServlet", BookServlet.class);
  7. bookServlet.saveBook();
  8. }
  9. }

BookService2 (他的作用主要就是实现bookService拥有多个类型,体现出@Qualifier 注解的作用)

  1. @Component
  2. public class BookService2 extends BookService
  3. {
  4. }

运行结果 在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,221人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring自动装配

    自动装配 Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值 1)、@Autowired:自动注入 默认优先按照类型去容器中找对应