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。

相关文章
|
1月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
163 26
|
3月前
|
XML 安全 Java
|
3月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
101 12
|
3月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
3月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
93 6
|
3月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
246 4
|
4月前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
224 4
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
3月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
96 3
|
3月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
64 1
|
4月前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
84 2

热门文章

最新文章