A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

自动装配:
         spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值;
1. @Autowired:自动注入:
         1. 默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);
         2. 如果找到多个相同类型的组件,再将属性的名称座位组件的id去容器中查找 applicationContext.getBean("bookDao")
         3. @Qualifier("bookDao");使用@Qualifier指定需要装配的组件的id,而不是使用属性名
         4. 自动状态默认一定要将属性赋值好,没有就会报错;可以使用@Autowired(required=false);
         5. @primary;让Spring进行自动装配的时候,默认使用首选的bean;也可以继续使用@qualifier执行需要装配的bean的名字
         BookService{
             @Autowired
             BookDao bookDao;
         }
2.     Spring还支持使用@Resource(JSR250)和@Inject(JSR330)[java规范的注解]
         @Resource:
             可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;
             没有支持@primary功能,没有支持@Autowired(required=false);
        @Inject:
            需要导入javax.inject的包,和Autowired的功能一样.没有required=false的功能;

        @Autowired:Spring定义的;@Resource,@inject都是java规范

3.    自动以组件想要使用Spring容器底层的一些组件(APplicationContext、BeanFactory、xxx);

         自定义组件实现xxxAware接口;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware;

         把Spring底层一些组件注入到自定义Bean中;

        xxxAware:功能使用xxxProcessor;(后置处理器)

                ApplicationContextAware --> ApplicationContextAwareProcessor;
以下是编写的示例代码:
[AppleScript] 纯文本查看 复制代码
package com.spring.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
 
import com.spring.dao.BookDao;
 
@ComponentScan({"com.spring.dao","com.spring.service","com.spring.controller"})
@Configuration
public class MainConfigAutowired {
        
        @Primary
        @Bean("bookDao2")
        public BookDao bookDao(){
                BookDao bookdao = new BookDao();
                bookdao.setLevel("2");
                return bookdao;
        }
        
}


[AppleScript] 纯文本查看 复制代码
package com.spring.service;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
 
import com.spring.dao.BookDao;
 
@Service
public class BookService {
 
        
        @Autowired(required=false)
        private BookDao bookDao;
 
        public void print(){
                System.out.println(bookDao);
        }
 
        @Override
        public String toString() {
                return "BookService [bookDao=" + bookDao + "]";
        }
        
}


[AppleScript] 纯文本查看 复制代码
package com.spring.controller;
 
import javax.annotation.Resource;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
 
import com.spring.service.BookService;
 
@Controller
public class BookController {
        @Resource
        private BookService bookService;
}


[AppleScript] 纯文本查看 复制代码
package com.spring.dao;
 
import org.springframework.stereotype.Repository;
 
 
@Repository
public class BookDao {
 
        private String level = "1";
        
        public String getLevel() {
                return level;
        }
 
        public void setLevel(String level) {
                this.level = level;
        }
 
        @Override
        public String toString() {
                return "BookDao [level=" + level + "]";
        }
        
}


测试类:
[AppleScript] 纯文本查看 复制代码
package com.spring.test;
 
 
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
import com.spring.config.MainConfigAutowired;
import com.spring.dao.BookDao;
import com.spring.service.BookService;
 
public class IOCTest_Auto {
 
        @Test
        public void test01(){
                AnnotationConfigApplicationContext        context = new AnnotationConfigApplicationContext(MainConfigAutowired.class);
                
                BookService bookService = context.getBean(BookService.class);
                System.out.println(bookService);
                
                /*BookDao bookDao = context.getBean(BookDao.class);
                System.out.println(bookDao);*/
                
                context.close();
        }
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马