spring IoC

Posted scmath

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring IoC相关的知识,希望对你有一定的参考价值。

1. 如果某个接口的实现类在Spring容器中不唯一 
  用@Qualifier来指定注入Bean的名字,如 
    @Autowired 
    @Qualifier(“sampleDaoImpl”) 
    private SampleDao dao; 

 

2. @Autowired只有一个选项, boolean required() default true;是否必须,且默认为true。因此,如果仅仅使用@Autowired,就必须要能注入,否则会报错。 
  @Resource拥有和@Autowired类似的作用。

 

3.  Spring支持使用@Configuration,把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。 

@Configuration("ctx") 
public class JavaApplicationContext  
    
    @Bean 
    public String hello() 
        return "hello"; 
    
 
    @Bean 
    public int max() 
        return 9; 
     
             

使用AnnotationConfigApplicationContext获得Spring容器 
ApplicationContext context = new AnnotationConfigApplicationContext(JavaApplicationContext.class); 
使用@ImportResource (“classpath:applicationContext.xml”)可以把其他容器导入到这个容器中。

 

4. BeanFactory提供的方法极其简单。它仅提供了六种方法供客户代码调用: 
•boolean containsBean(String):如果BeanFactory包含给定名称的bean定义(或bean实例),则返回true
•Object getBean(String):返回以给定名字注册的bean实例。根据bean的配置情况,如果为singleton模式将返回一个共享的实例,否则将返回一个新建的实例。如果没有找到指定的bean,该方法可能会抛出BeansException异常(实际上将抛出NoSuchBeanDefinitionException异常),在对bean进行实例化和预处理时也可能抛出异常 
•Object getBean(String, Class):返回以给定名称注册的bean实例,并转换为给定class类型的实例,如果转换失败,相应的异常(BeanNotOfRequiredTypeException)将被抛出。上面的getBean(String)方法也适用该规则。 
•Class getType(String name):返回给定名称的bean的Class。如果没有找到指定的bean实例,则抛出NoSuchBeanDefinitionException异常。 
•boolean isSingleton(String):判断给定名称的bean定义(或bean实例)是否为singleton模式(singleton将在bean的作用域中讨论),如果bean没找到,则抛出NoSuchBeanDefinitionException异常。 
•String[] getAliases(String):返回给定bean名称的所有别名。 

---BeanFactory它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 

public interface BeanFactory  

Object getBean(String name) throws BeansException; 

Object getBean(String name, Class requiredType) throws BeansException; 

boolean containsBean(String name); 

boolean isSingleton(String name) throws NoSuchBeanDefinitionException; 

Class getType(String name) throws NoSuchBeanDefinitionException; 

String[] getAliases(String name) throws NoSuchBeanDefinitionException; 

 

从这个接口的定义可以看出,BeanFactory是关注如何获取bean的,至于Bean的定义存在何处,怎样存储的,根本就不关心。这意味这Spring bean 的definition事实上可以存在Ldap里,可以存在DB里,非常的灵活,而不仅仅是XML文件。 

https://love398146779.iteye.com/blog/2101932

5. getObject()返回Factory管理的对象,注意并不是Factory本身的实例。Factory管理的对象可以是singleton的,也可以是prototype的,所以此接口有了另一个方法boolean isSingleton()用于区别是返回哪一种对象。getObjectType()最主要的目的就是在不创建实例的情况下就能知道欲创建的对象的类型。

public interface FactoryBean  

Object getObject() throws Exception; 

Class getObjectType(); 

boolean isSingleton(); 

 

 

以上是关于spring IoC的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot脚手架项目002-004.Spring IOC_权限管理系统_Spring:什么是IOCSpring Bean注入SpringBean的注解bean的加载流程

Springday02 jabcTemplate注解IOC创建对象注解IOC注入注解 IO生命周期纯注解IOCSpring-junitAOP-JDK和CGLIB动态代理

Spring快速入门

Spring框架--Spring JDBC

Spring框架--AOP面向切面编程

Spring框架--AOP面向切面编程