Spring之Ioc配置和使用
2017-09-08 23:12
393 查看
Ioc的配置使用
Bean的配置
IoC容器通过Bean的定义创建Bean,Bean的定义在容器内部用BeanDefinition对象表示,包含如下内容:Bean的全限定类型,用于加载类
Bean的行为定义:定义了Bean在容器中的行为
Bean的创建方式定义:通过构造器还是工厂方法
Bean之间关系定义:依赖bean
配置项 | 作用 | 取值 |
---|---|---|
scope | 作用范围 | prototype: 模板类型,每次getBean都返回一个新的对象。singleton: IoC容器中只保留一个同一ID的Bean。request: 每一次http请求都会产生一个bean,且只在此次request内有效。session: 每一次http请求都会产生一个bean,且只在此次session内有效,参考 |
lazy-init | 懒加载 | true、false |
某些SingletonBeanFactory接口的实现类允许将那些非BeanFactory创建、已有的用户对象注册到容器中。如:DefaultListableBeanFactory的registerSingleton()方法。
Bean的命名
不指定id<bean class="com.kiikgu.HelloServiceImpl" /> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = context.getBean(HelloService.class);
如果IoC容器中包含多个同类型的Bean,使用T getBean(Class requireType)会报错
指定id
<bean id="helloService" class="com.kiikgu.HelloServiceImpl" /> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = (HelloService) context.getBean("helloService");
ID必须Ioc容器唯一
指定name
<bean name="helloService" class="com.kiikgu.HelloServiceImpl" /> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = (HelloService) context.getBean("helloService");
name为标识符,必须Ioc容器唯一
指定id和name
<bean id="helloService" name="helloService4" class="com.kiikgu.HelloServiceImpl" /> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = (HelloService) context.getBean("helloService"); HelloService helloService4 = (HelloService) context.getBean("helloService4"); System.out.println(helloService == helloService4);
id为标识符,name为别名,id可以与name相同,但两者必须Ioc容器唯一
指定多个name,name之间以“,”、“ ”、“;”分割
<bean name="helloService alias1;alias2,alias3" class="com.kiikgu.HelloServiceImpl" /> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = (HelloService) context.getBean("helloService"); HelloService alias1 = (HelloService) context.getBean("alias1"); HelloService alias2 = (HelloService) context.getBean("alias2"); HelloService alias3 = (HelloService) context.getBean("alias3"); System.out.println(helloService == alias1); System.out.println(alias1 == alias2); System.out.println(alias2 == alias3); String[] helloServiceAlias = context.getAliases("helloService"); System.out.println(Arrays.toString(helloServiceAlias));
第一个name为标识符,其它为别名,必须Ioc容器唯一
通过alias标签指定别名
<bean name="helloService" class="com.kiikgu.HelloServiceImpl" /> <alias name="helloService" alias="alias1" /> <alias name="helloService" alias="alias2" /> <alias name="helloService" alias="alias3" />
别名也必须Ioc容器唯一
实例化Bean
Ioc容器获取Bean的配置信息(BeanDefinition),通过反射机制创建Bean。主要有一下几种方式实例化Bean:使用构造器实例化Bean
默认构造器:
<bean name="helloService" class="com.kiikgu.HelloServiceImpl" />
配置的类必须要有默认构造器
含参数构造器:
<bean name="helloService" class="com.kiikgu.HelloServiceImpl"> <constructor-arg name="message" value="hello world!!!" /> </bean> ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService = (HelloService) context.getBean("helloService"); helloService.sayHello();
使用静态工厂实例化Bean
工厂类
public class HelloServiceFactory { public static HelloService getHelloService(String message) { System.out.println("HelloServiceFactory.getHelloService"); return new HelloServiceImpl(message); } }
配置:
<bean name="helloService1" class="com.kiikgu.HelloServiceFactory" factory-method="getHelloService"> <constructor-arg name="message" value="hello world!!!" /> </bean>
调用:
ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService1 = (HelloService) context.getBean("helloService1"); helloService1.sayHello();
使用实例工厂方法实例化Bean
实例工厂:
public class HelloServiceFactory { public HelloService getInstance(String message) { System.out.println("HelloService.getInstance"); return new HelloServiceImpl(message); } }
配置:
<bean id="helloServiceFactory" class="com.kiikgu.HelloServiceFactory" /> <bean name="helloService2" factory-bean="helloServiceFactory" factory-method="getInstance"> <constructor-arg name="message" value="hello factory" /> </bean>
调用:
ApplicationContext context = new ClassPathXmlApplicationContext("spring-learn.xml"); HelloService helloService2 = context.getBean("helloService2", HelloService.class); helloService2.sayHello();
不用配置全限定类
参考
http://jinnianshilongnian.iteye.com/blog/1413857http://www.cnblogs.com/qq78292959/p/3716827.html
相关文章推荐
- Spring IoC使用的基本配置
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- Spring学习(九)使用ioc注解方式配置bean
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- Spring.net 控制反转(IOC)依赖注入(DI)的使用 以及Config文件的配置
- 开涛spring3(2.3) - IoC的配置使用
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- spring 框架中的依赖注入(IOC--设值注入)---使用xml简单配置文件---的具体实例的简单实现
- Spring学习(九)使用ioc注解方式配置bean
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- Spring的Ioc简单使用实例(含XML配置文件路径知识)
- 15、(知识篇)Spring使用Annotation配置bean02(泛型IOC)
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- Spring核心框架IOC---- 使用注解完成IOC配置---- 注解配置文件
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- Spring IOC的配置使用
- Spring IOC的配置使用
- Spring IOC的配置使用