Spring框架:Bean的三种装配方式

一、
Bean的装配 Bean的装配,即Bean对象的创建。
1 默认装配方式(构造方式)
2 动态工厂Bean
3 静态工厂Bean
二、代码实现

appilcationContext.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">
	<!--构造方式-->
	<bean id="someServiceImpl" class="com.facai.service.Impl.SomeServiceImpl"></bean>
	<!-- 动态工厂:注册工厂 -->
	<bean id="serviceFactory" class="com.facai.service.factory.ServiceFactory"></bean>
	<!-- 从工厂中获取someServiceImpl的bean对象 -->
	<bean id="someServiceImpl2" factory-bean="serviceFactory" factory-method="getSomeService"></bean>
	
	<!-- 静态工厂获取 -->
	<bean id="staticSomeServiceImpl" class="com.facai.service.factory.ServiceFactory" factory-method="getStaticSomeService"></bean>
</beans>

工厂方法

package com.facai.service.factory;

import com.facai.service.SomeService;
import com.facai.service.Impl.SomeServiceImpl;

public class ServiceFactory {
	//动态工厂创建bean方法
	public SomeService getSomeService() {
		SomeService service=new SomeServiceImpl();
		return service;
	}
	//静态工厂创建bean方法
		public static SomeService getStaticSomeService() {
			SomeService service=new SomeServiceImpl();
			return service;
		}
}

测试类

@Test
	public void someTest1() {
		//创建容器对象,ApplicationContext初始化时,所有的容器中的bean创建完毕
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService service=ac.getBean("staticSomeServiceImpl", SomeService.class);
		service.doSome();
	}

BeanFactory和ApplicationContext获取bean对象的区别

@Test
	public void someTest1() {
		//创建容器对象,ApplicationContext初始化时,所有的容器中的bean创建完毕
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService service=ac.getBean("staticSomeServiceImpl", SomeService.class);
		service.doSome();
	}
	@Ignore
	@Test
	public void someTest2() {
		//创建容器对象,BeanFactory调用getBean获取响应对象时,才创建对象
		BeanFactory ac=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		SomeService service=ac.getBean("someServiceImpl", SomeService.class);
		service.doSome();
	}

当将断点设置在
SomeService service=ac.getBean(“staticSomeServiceImpl”, SomeService.class);时
在这里插入图片描述有输出
当将断点设置在
SomeService service=ac.getBean(“someServiceImpl”, SomeService.class);时
在这里插入图片描述无输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架识别bean的方式有以下几种: 1. 扫描注解:Spring可以通过扫描指定包路径下的类来自动识别带有特定注解的bean。您可以使用`@Component`、`@Service`、`@Repository`等注解来标识bean,并在配置文件中配置包扫描路径。 2. XML配置:通过在XML配置文件中显式地声明bean,Spring可以根据配置文件中的定义来创建和管理bean。您可以使用`<bean>`元素来定义bean,并指定其类名、属性值等信息。 3. Java配置类:使用Java配置类,您可以通过编写代码来配置bean。通过在Java配置类上添加`@Configuration`注解,并在方法上添加`@Bean`注解来定义bean。 4. 自动装配Spring可以自动识别并装配bean,使其能够在其他bean中进行依赖注入。您可以使用`@Autowired`、`@Resource`等注解来实现自动装配。 5. 条件化注册:Spring提供了条件化注册bean的功能,可以根据特定条件来决定是否注册某个bean。您可以使用`@Conditional`注解来标记一个条件,当满足该条件时才会注册对应的bean。 6. Bean后置处理器:Spring提供了Bean后置处理器的机制,您可以实现自己的后置处理器,在bean创建后对其进行额外的处理。通过实现`BeanPostProcessor`接口,您可以在bean的初始化前后对其进行处理。 这些方式可以单独使用,也可以结合使用。Spring框架会根据配置文件和注解来识别和创建bean,并管理它们的生命周期。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值