Spring自动注入
来源:互联网 发布:linux免费杀毒软件 编辑:程序博客网 时间:2024/05/21 17:11
Spring提供了四种自动注入的方式,分别是byName,byType,constructor,autodetect。下面我们一一介绍。
首先介绍的是byName方式,试图在容器中寻找和需要自动装配的属性名相同的Bean(或ID)。
下面是一个示例。
我们定义一个接口Description.java:
- package com.spring.di;
- public interface Description {
- public void say();
- }
我们再定义一个接口的具体实现PeopleDescription.java:
- package com.spring.di;
- public class PeopleDescription implements Description{
- public void say() {
- System.out.println("我今年23岁了");
- }
- }
我们再定义一个接口People.java:
- package com.spring.di;
- public interface People {
- public void say();
- }
我们写一个具体实现Jack.java:
- package com.spring.di;
- public class Jack implements People{
- private Description description;
- public void setDescription(Description description) {
- this.description = description;
- }
- public void say() {
- description.say();
- }
- }
我们写一个Spring的配置文件ditest.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:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
- <bean id="description" class="com.spring.di.PeopleDescription"/>
- <bean id="jack" class="com.spring.di.Jack" autowire="byName"/>
- </beans>
我们写一个测试类DiTest.java:
- package com.spring.di;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class DiTest {
- public static void main(String[] args) {
- ApplicationContext ctx=new ClassPathXmlApplicationContext("ditest.xml");
- People p1=(People) ctx.getBean("jack");
- p1.say();
- }
- }
程序输出:
- 我今年23岁了
下面我们介绍byType方式,试图在容器中寻找一个与需要自动注入的属性类型相同的Bean,限制是配置文件中只能有一个符合要求的Bean。
我们修改ditest.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:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
- <bean id="des" class="com.spring.di.PeopleDescription"/>
- <bean id="jack" class="com.spring.di.Jack" autowire="byType"/>
- </beans>
运行结果:
- 我今年23岁了
下面我们介绍constructor,试图在容器中查找与需要自动装配的Bean的构造函数参数一致的一个或多个Bean。
我们修改Jack.java文件如下:
- package com.spring.di;
- public class Jack implements People{
- private Description description;
- public Jack(Description description) {
- this.description = description;
- }
- public void say() {
- description.say();
- }
- }
我们修改ditest.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:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
- <bean id="des" class="com.spring.di.PeopleDescription"/>
- <bean id="jack" class="com.spring.di.Jack" autowire="constructor"/>
- </beans>
运行结果:
- 我今年23岁了
最后一种方式是autodetect,首先尝试使用constructor来自动装配,然后使用byType方式。
这种方式与前面类似,不再演示。
- Spring自动注入Bean
- Spring自动注入
- Spring的自动注入
- SPRING-MVC 自动注入
- spring 自动依赖注入
- Spring自动注入Bean
- spring 自动扫描 注入
- spring自动注入入门
- Spring自动注入“失效”
- spring 自动装配注入
- Spring 自动注入依赖
- Spring自动注入,@Autowired
- Spring自动注入byType
- Spring自动注入construtor
- Spring 自动依赖注入
- 了解Spring 构造注入和自动注入
- Spring IOC注入(三)自动注入
- Spring的自动扫描注入
- Spring注入集合
- asp关闭数据库链接之前先做判断
- 算法和编程面试题
- Cover Flow特效实现(1)
- Open Inventor练习-iv文件读写显示1
- Spring自动注入
- 远程文件数据导入 SQL Server 数据库
- Ubuntu 下 su:authentication failure的解决办法
- 购物网第三阶段总结笔记1:商品表的设计和后台产品分类界面制作
- Dom ,JavaScript
- REST架构实质
- 创建基于 Win32 的应用程序 (C++)
- CDialog的WM_CRETAE
- glibc