spring-IOC

  • IOC(Inversion of Control)
    类与类之间的依赖和创建关系不再由自己负责,而是由一个容器去创建实例并管理实例与实例之间的关系。
    有以下注意几点:
    1.默认情况下,一个ID被获取bean只会产生一个对象
    2.同一个类可以配置多个不同的ID
    3.对于配置多个不同ID,在编译时没有问题,运行时报错
    4.对于容器的getBean方法,可以是ID作为string参数获取object对象(需要强转),或者相应类对象作为class参数获取
    对应对象,如果在配置文件配置多个相同的类,并类对象作为参数获取运行时会报错

  • spring创建对象的四种方式
    1.通过类的无参构造创建
    最普通的创建方式,基本格式,要求此类必须有无参构造,因为是利用反射产生的,利用object o = 类名.class.newInstance()产生,此方法只能创建有无参构造的类实例。

    2.通过静态工厂创建
    对于一些没有无参构造和抽象类,是无法用上面方式创建。

public class PersonStaticFactory{
		public static Person getPerson(){
			return new Person(T t);
		}
}
<bean id="person" class= "com.domian.PersonStaticFactory" factory-method="getPerson">

3.利用实例工厂创建
与静态工厂十分类似,不同的是不再是静态方法,所以必须先获得工厂自身实例。

public class Factory{
	public Person getPerson(){
		return new Person(T t);
	}
}
<bean id="factory" class="com.domian.Factory" >
<bean id="person" factory-bean="factory" factory-method="getPerson">

4.利用spring内置工厂接口创建
实现spring自带接口FactoryBean

public class PersonFactory implements FactoryBean<Person>{

	@Override
	public Person getObject() throws Exception {
		// 获取具体对象
		return new Person();
	}

	@Override
	public Class<?> getObjectType() {
		// 获取对象的类对象
		return null;
	}

	@Override
	public boolean isSingleton() {
		// 是否是单例
		return false;
	}

}
<bean id="person" class="IOC.factory.PersonFactory"></bean>
  • 单例和多例
    默认情况下,spring是单例模式,无论利用ID获取多少次对象都是同一个对象,单例模式下,在容器初始化的时候,会对每一个bean进行创建,可以设置为懒加载来避免加载的时候就创建了过多的无用对象。
    设置属性scope=“prototype”变成多例模式,每个bean若不想是单例模式都需自身配置Scope属性,即创建方式,还有session和request方式。
<bean id="person" class="IOC.Person" scope="prototype"></bean>

多例模式下不会在初始化容器时就创建对象,会在什么时候调用相应的getbean方法获取对象时,创建对象。

  • 懒加载
    因为spring容器默认是以单例模式创建对象,会在容器一初始化就自动创建配置的bean对象们。如果这些对象没有使用就浪费内存和时间了,所以有了懒加载机制,开启懒加载机制并不会在容器一初始化就创建bean对象,而是和多例模式下的bean对象一样,在调用相应的getbean方法时创建。
<bean id="person" class="IOC.Person" lazy-init="true"></bean>
<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-3.2.xsd "
	default-lazy-init="true"> ----------------------//使得整个容器的所有bean都是懒加载
  • 配置bean对象的初始化和销毁方法
    对于某些bean在被初始化之后和被销毁之前需要实现某些功能。可以如下方法中完成操作。
<bean id="person" class="IOC.Person" init-method="drink" destroy-method="eat"></bean>

在此配置例子中会在掉用getbean(“person”)创建对象后调用drink方法,在调用close方法(ApplicationContext接口没有此方法,可以直接指定其实现类ClassPathXmlApplicatonContext)销毁person这个bean之前掉用eat方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring-IOCSpring框架的核心部分之一,它是一种设计模式,全称为Inversion of Control(控制反转)。它通过将对象的创建、依赖关系的管理和对象的生命周期交给Spring容器来实现,从而降低了组件之间的耦合度,提高了代码的可重用性和可维护性。Spring-IOC的实现主要依靠Spring容器,Spring容器是Spring框架的核心,它负责创建、管理和装配Bean对象,其中Bean是Spring框架中最基本的组件。 Spring-IOC的实现主要有两种方式:BeanFactory和ApplicationContext。其中,BeanFactory是Spring-IOC的基本实现,而ApplicationContext是BeanFactory的子接口,提供了更多高级特性。ApplicationContext是Spring框架中最常用的IOC容器,它除了提供BeanFactory的所有功能外,还提供了更多的企业级特性,例如AOP、事务管理、国际化、事件传播等。 下面是一个简单的Spring-IOC的例子,假设我们有一个UserService接口和一个UserServiceImpl实现类,我们可以通过Spring-IOC容器来创建和管理UserServiceImpl对象: 1.定义UserService接口和UserServiceImpl实现类 ```java public interface UserService { void addUser(User user); } @Service public class UserServiceImpl implements UserService { @Override public void addUser(User user) { // 添加用户的具体实现 } } ``` 2.在Spring配置文件中配置UserService实例 ```xml <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 3.在代码中获取UserService实例并使用 ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userService", UserService.class); User user = new User(); userService.addUser(user); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值