控制反转及Bean装配的几种方式

控制反转及Bean装配的几种方式

Spring两大基础核心,一是控制反转,二是依赖注入

控制反转和依赖注入

控制反转,通俗来讲,就是将bean的创建和销毁交由另一个东西全权管理,这个东西叫做Spring容器,一般来说,在Spring应用中,容器管理着应用中所有bean的生命周期,包括何时创建,何时使用,何时销毁,该容器相当于一个bean的管家。控制反转具体体现在:当需要一个bean时,不是用户自己创建,而是Spring容器根据应用的需要,来主动创建一个,并将其注入到应用中。一句话概括:bean的创建完全交给了Spring容器来进行,应用程序本身不再负责所需要bean的创建。举个例子:假设应用程序需要一个名为A的bean,按照以前传统的开发方式,我们需要new一个A对象,然后将A对象赋给相应的变量值,如下代码所示:

Class  Test{

Privat  A  a=new A()

…………

}

应用程序类Test需要一个名字为A的bean,然后Test类直接在类A中创建了一个A对象。这种方式属于“正向”自己注入一个自己需要的beanA。但是在Spring中,这个名为A的bean不在需要Test类自己创建。Spring容器可以帮Test创建一个名字为A的bean然后将该对象注入到Test类中。依赖注入,如上所示,Test类自己在类内部创建一个A,而通过Spring的方式,类A由Spring容器创建,然后自己主动注入到类Test中,并不需要自己主动去创建。所谓依赖注入,其实是通过Spring容器来创建应用程序所需要的bean,然后自己去维护bean与bean之间的依赖关系,比如上面的例子,名为Test的bena和名为A的bean,他们通过Spring的依赖注入来维护这个两个类之间的关系。有的博客中说依赖注入是控制反转的另一种说法,我更倾向于另一种理解,控制反转说的是bean的创建,依赖注入说的是由Spring创建出来的bean之间关系的维护。

Spring中bean装配的几种方式

1.自动化装配

2.通过java方式配置

3.通过xml方式来配置

 

1.通过自动化方式装配

这种方式要创建一个配置类如下:

 

 

 

 

 

@Configuration————————表明这是一个配置类,Spring中该注解用来

表示是一个配置类,将其注册到Spring中。

@ComponentScan———————配置组件扫描,该注解扫描该包及其子包,将配置的相关bean进行扫描。

Class  Test{

 

}

 

然后在相应的bean中上相应的注解,这里主要包含四个:@Component,@Respository,@Service ,@Controller ,其中@Component这个注解可以代替后面三个,但是为了业务逻辑看的清楚,使用@Respository这个注解来进行数据访问层相关的Bean注解,@Service用来业务逻辑层的注解,@Controller用在表现层的注解。

当配置了基本配置类和bean组件注解(@Respository,@Service ,@Controller)之后,可以使用如下方式进行自动注入:

@Autowrized     ——————————这个注解将自动创建Tes类的 ,对象并将实例化的Test对象赋予testt

private  Test   test;

2通过java方式装配

通过java方式来进行注入能完成通过自动注入不能完成的任务,比如说,我有一个第三方组件需要引入,但是组件是第三方的,他的源代码里没有加如诸如@Respository@Service@Controller等注解,那么我们就无法通过自动装配的方式进行初始化组件bean了,这时候,我们可以使用基于java的配置。

如下所示:

@Configuration  ————————在配置类中添加@Configuration注解,代表是一个配置类

Public Class Config{

@Bean        ————————将名字为A的bean进行注册为Spring上下文。

Public A getA(){
return new A();

}

然后通过配置类Config来进行依赖注入。

@Bean

Public Class B(){

Return new B(getA());

}

3通过xml配装配

 

通过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-4.0.xsd">

    <bean id="A " class="类的全限定名”></bean>

</beans>

如上面红色部分,通过<bean>标签来将bean注册到Spring上下文中,在使用的时候,我们可以通过两种方式来获取相应的实例化对象:

1.通过Spring上下文

ApplicationContext Appcontext=new ClassPathXmlApplicationContext("配置文件.xml");

Private  A a=Appcontext.getBean(“A”);

2.通过注解自动配置

@Autowrized

Private A a;

对于在通过配置文件进行依赖注入,可以通过下面几种方式,1)通过构造器注入2)通过setter方法注入3)通过工厂方法注入。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值