3. 再谈spring IoC

IoC实现原理

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

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

配置元数据(configuration Metadata)

  1. 基于XML的元数据
<bean id="..." class="...">
    <!-- 放置bean的协作者以及配置-->
</bean>
  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();
    }

}

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

<beans>
    <bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2016.06 经过无数次实习面试之后,来到红星美凯龙,做 了一名前端开发。 2017.04 放弃转正机会,虽然领...
    独忆雨薇阅读 179评论 1 0
  • 1.我今天看完了3本《老鼠记者》。 2.我下午又去排练舞蹈了。 3.我的手表掉水里了,后来捞上来了,还能用,我太开心了。
    Minna明红阅读 201评论 0 0
  • 已读了一半了。 从11.20日开始,听了,樊登读书会的讲解。感觉我减肥大计要实现了。 每天吃鸡蛋,牛肉,黄瓜可以不...
    Oo呢喃oO阅读 709评论 2 0
  • 昨夜,疯狂想你 在一首诗里 今夜,想你疯狂 穿过千山,走遍万水 梦境里,那叶小舟 在廊桥的柳岸边,摇晃 秋风吹遍万...
    一滴露水阅读 342评论 6 18