3. 再谈spring IoC

IoC实现原理

反射 : 在运行状态中,根据提供的类的路径或者类名,通过反射来动态的获取该类的所有属性和方法。

工厂模式 : 把IoC容器当作一个工厂,在配置文件或者注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象。对象生成的代码及对象之间的依赖关系在配置文件中定义,这样就实现了解耦。

配置元数据(configuration Metadata)

  1. 基于XML的元数据

    

  1. 基于注解的配置
  2. 基于Java的配置

实例化容器

Spring IoC容器需要在应用启动时进行实例化,在实例化的过程中,IoC容器会从各种外部资源(如本地文件系统,JAVA类路径)加载配置元数据,提供给ApplicationContext构造函数。

例:从类库经中加载基于XML的配置元数据的例子

ApplicationContext context = new ClassPathXmlApplicationContext(
                                    new String[] {
                                        "services.xml","daos.xml"
                                    });

注入方式

  1. 基于构造函数
  2. 基于setter

bean范围

  1. 默认单例
  2. prototype
  3. ...

==:bean以及@Bean的理解==

  1. bean:

一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;

一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装

  1. @Bean:

@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

==================================相当于=================================


    

你可能感兴趣的:(3. 再谈spring IoC)