Spring三种bean装配方案

首先来个简单且古老的Java类吧

public class SpringBean {
    public void say(){
        System.out.println("这是一个SpringBean");
    }
}

1、当然了,第一种必须是我们最智能话的装配方案,自动装配了。

在自动装配的时候,需要保证对进行注解操作。
@Component//一种通用的组件描述
@Controller//通常用于web中的控制器组件上
@Service//通常用于service服务组件上
@Repository//通常用于数据访问及操作组件

@Component//一种通用的组件描述
//@Controller//通常用于web中的控制器组件上
//@Service//通常用于service服务组件上
//@Repository//通常用于数据访问及操作组件
//一次只能使用一个哟,千万不要像我这样进行注解,为了减少代码量我才把他们放在了一起。
public class SpringBean {
    public void say(){
        System.out.println("这是一个SpringBean");
    }
}

自动装配方案中如何在注解没有明确指定名称的话,则默认bean的ID为类名且首字母自动变成小写字母,如果指定了名称的话则以指定的名称作为bean的ID。

@Component("component")//一种通用的组件描述
//@Controller("controller")//通常用于web中的控制器组件上
//@Service("service")//通常用于service服务组件上
//@Repository("repository")//通常用于数据访问及操作组件
public class SpringBean {
    public void say(){
        System.out.println("这是一个SpringBean");
    }
}

1.1 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.xsd">
  <!--启用自动扫描功能,扫描“cn.sharek.test”包下所有带注解的POJO(Plain Old Java Object,简单且古老的Java对象)-->
    <context:component-scan base-package="cn.sharek.test"/>
</beans>
1.2 JavaConfig配置自动装配方案
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration//表明该类是Spring的配置类
@ComponentScan("cn.sharek.test")//启用自动扫描功能,扫描“cn.sharek.test”包下所有带注解的POJO(Plain Old Java Object,简单且古老的Java对象
public class SpringRootConfig {
}

没有看错,通过Java代码实现Spring的配置工作就是这么简单,但它并不是万能的,直到现在依然有部分的配置(Spring Web FLow....)无法通过Java代码实现,必须借助于XML文件。不要着急,文章结尾会介绍一种混合配置,XML中导入Java代码的配置,Java代码中导入XML的配置都是可以的。

2、通过XML文件,手动编辑bean

接下来的是通过XML手动编辑bean,当然了,继续使用前面那个用来被我们蹂躏的POJO。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--id指定bean的名称,class指定是那个类-->
    <bean id="springBean" class="SpringBean"/>
</beans>

现在:这个bean已经可以使用了。

如果这个bean没有属性需要设置或者注入,且没有唯一的带有参数的构造方法的话那么这么做是正确的。当有唯一的带参构造方法,且没有实现无参构造方法的那么这么做绝对是一个错误的选择,这时候你需要为构造参数设置属性值或者注入属性值。
看一看上面所描述的情况该如何去做:

public class SpringBean {
    public SpringBean(String str) {
        System.out.println("你设置了str!!!它的值是:"+str);
    }

    public void say(){
        System.out.println("这是一个SpringBean");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="springBean" class="SpringBean">
        <constructor-arg value="一只二哈"/>
    </bean>
</beans>

当然了,我们在这里不考虑那些多参数的情况,因为我们在这是在将bean的装配方案,以后会将多参数的情况该如何去做的,不要着急。

3、通过JavaConfig类,手动编辑bean

我比较喜欢这种,通过来管理类。

@Configuration//表明该类是Spring的配置类
public class SpringRootConfig {
    @Bean//很简单
    public SpringBean springBean(){
        return new SpringBean();
    }
}

方法名就是bean的ID,该变方法名称就可改变bean的ID。当然了也可已通过注解的name属性来指定

@Configuration//表明该类是Spring的配置类
public class SpringRootConfig {
    @Bean(name="happy")//很简单
    public SpringBean springBean(){
        return new SpringBean();
    }
}

到此就该结束了。

No,No,No

还有一件有趣的事情

当然是混合配置了

在JavaConfig类中混入JavaConfig类

@Configuration//表明该类是Spring的配置类
@Import(ServiceConfig.class)//导入一个配置类
//@Import({ServiceConfig.class,ControllerConfig.class})//导入多个配置类
//@Import只能出现一次哟
public class SpringRootConfig {
}

在JavaConfig类中混入JavaConfig类及XMl文件

当然了只混入XML文件也是可行的,这没有错。

@Configuration//表明该类是Spring的配置类
@Import(ServiceConfig.class)//导入一个配置类
@ImportResource("classpath:application.xml")//导入一个XML配置文件
public class SpringRootConfig {
}

在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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <import resource="service.xml"/>
    <import resource="controller.xml"/>
</beans>

在XML文件中JavaConfig

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--导入ServiceConfig-->
    <bean class="ServiceConfig"/>
    <!--导入ControllerConfig-->
    <bean class="ControllerConfig"/>
</beans>

混合配置似乎看起来很好用,能够将一个文件按照功能,或者业务进行拆分。但需要注意的是,千万千万不能出现重复ID的bean。不然,Spring会不清楚你在使用哪一个bean。

时间: 2024-10-22 17:59:33

Spring三种bean装配方案的相关文章

三种容器网络方案

本文讲的是三种容器网络方案[编者的话]本文是TheNewStack容器电子书的一部分,着重介绍了容器的网络互联方案.有兴趣的同学可以关注下电子书. 任何云端部署容器的关键之一是管理容器间的网络.在研究编写我们最新的电子书<Networking, Security & Storage with Docker & Containers>期间,我们总结了三种通过插件集成容器网络的方式.前一篇文章中,我们介绍了容器网络模型(CNM)和容器网络接口(CNI),这篇文章中我们会介绍它们的起

有关puppet agent端三种备份恢复方案探讨研究

备份方案一.通过自定义facter结合元素backup进行备份恢复 一.facter部署 1.创建目录结构 [root@puppetserver modules]# mkdirpublic/{modules,manifests,files,lib/facter} -p 2.打开模块中的插件功能 [root@puppetserver public]# vim/etc/puppet/puppet.conf [main] pluginsync = true 3.编写自定义fact [root@pupp

电子商务营销常见的三种现象和要把握三种资源

现代的电子商务走入了一个大的误区,就是就电子商务而论电子商务,造成电子商务营销的概念非常简单与狭小,基本停留在三个部分:一是电子商务网站的建立,我们可以叫做网站营销.二是电子商务的网上购物营销,做得非常初步,根本还达不到所谓的品牌经营,更达不到各大网商对自己所做产品进行完整系统的一体化品牌推广.三是电子商务广告业务与商务性炒作上,什么名人爱谁上谁了,什么xx姐姐在某地受到谁打了等等一些事件性的运行,从营销经营来说,中国的电子商务还没有真正意义上走入商务营销整合的道路中来. 然而,今年的国际金融风

Spring实战3:装配bean的进阶知识

主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expression Language 在装配bean-依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配.基于JavaConfig.基于XML文件.这篇文字将探讨一些Spring中关于bean的管理的高级知识,这些技能你可能不会每天都用,但是非常重要. 3.1 Environments

Spring实战2:装配bean—依赖注入的本质

主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须相互了解.能够相互协作完成工作.例如,在一个在线购物系统中,订单管理组件需要与产品管理组件以及信用卡认证组件协作:这些组件还需要跟数据库组件协作从而进行数据库读写操作. 在Spring应用中,对象无需自己负责查找或者创建与其关联的其他对象,由容器负责将创建各个对象,并创建各个对象之间的依赖关系.例如

spring配置datasource三种方式

spring配置datasource三种方式 1.使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSour

【SSH系列】深入浅出spring IOC中三种依赖注入方式

spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?接触新的知识,小编的脑袋中全是大大的问号,不过没有关系,今天这篇博文,小编主要来简单的介绍一下在spring IOC中依赖注入的方法. 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性.我们可以从以下几个方面理解: a.参与者都

【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取   带着这个想法去看下面几种方式 =============================================================================================== 1>从spring boot默认的application.properties资

笔记本升级SSD的三种方案

  和台式机相比,大家对于笔记本性能的要求相对低一些,那么在升级笔记本硬盘的过程中是追求性能还是大容量,或是两者结合呢?小编将拿出三种解决方案与大家探讨. 针对不同需求的用户群体,我们将笔记本升级方案大致总结为以下三种: 1.机械硬盘更换大容量SSD; 2.机械硬盘移至光驱位,SSD加装至原有机械位; 3.M.2 SSD搭配机械硬盘(或SSD). 三个解决方案各有什么样的优势与缺点,我们将在后文中一一解答. [方案一:大容量] 什么才是大容量SSD? 现阶段当属480GB或512GB以上的SSD