Spring自动装配

  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依赖

 
   <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
{
}

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值