Spring之对象依赖关系(依赖注入Dependency Injection)
来源:互联网 发布:淘宝信用卡有什么银行 编辑:程序博客网 时间:2024/05/14 16:20
Spring中,如何给对象的属性赋值:
1:通过构造函数,如下所示:
<!-- 1:构造函数赋初始值 -->
<bean id="user1" class="com.bie.po.User">
<constructor-arg value="10010" type="int"></constructor-arg>
<constructor-arg value="张三" type="java.lang.String"></constructor-arg>
</bean>
2:通过set方法给属性注入值,如下所示:
<!-- 通过set方法给属性注入值,是通过set方法给属性赋值的哦, 通过容器注入值-->
<bean id="user" class="com.bie.po.User">
<property name="id" value="10010"></property>
<property name="name" value="李四"></property>
</bean>
2.1:通过set方法实现dao的注入,service的注入,action的注入;如下所示:
实现上面的前提是已经在对应的类中实现了下面的set方法和私有的类的成员变量的定义;
比如:在service层的方法中实现UserDao的定义和set方法的实现。
在action层的方法中实现UserService的定义和set方法的实现。
1 private UserDao userDao;2 public void setUserDao(UserDao userDao) {3 this.userDao = userDao;4 }
1 private UserService userService;2 public void setUserService(UserService userService) {3 this.userService = userService;4 }
1 private UserAction userAction;2 public void setUserAction(UserAction userAction) {3 this.userAction = userAction;4 }
<!-- dao的set注入 -->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<!-- service的set注入 -->
<bean id="userService" class="com.bie.service.UserService">
<!-- 处理对象的依赖关系,依赖注入 -->
<property name="userDao" ref="userDao"></property>
</bean>
<!-- action的set注入 -->
<bean id="userAction" class="com.bie.action.UserAction">
<!-- 处理对象的依赖关系,依赖注入 -->
<property name="userService" ref="userService"></property>
</bean>
2.2:通过内部bean实现dao的注入,service的注入,action的注入;如下所示:
(缺点,相当于局部变量,service和dao只能使用一次,不方便维护)
<!-- 内部bean -->
<bean id="userAction" class="com.bie.action.UserAction">
<property name="userService">
<bean class="com.bie.service.UserService">
<property name="userDao">
<bean class="com.bie.dao.UserDao"></bean>
</property>
</bean>
</property></bean>
3:p命名空间,如下所示:
《 注意:给对象属性注入值也可以通过p名称空间给对象的属性注入值,但是Spring的版本必须是3.0版本以上才可以使用
必须在applicationContext.xml中引入这句话:xmlns:p="http://www.springframework.org/schema/p"
》
实现上面的前提是已经在对应的类中实现了下面的set方法和私有的类的成员变量的定义;
比如:在service层的方法中实现UserDao的定义和set方法的实现。
在action层的方法中实现UserService的定义和set方法的实现。
<!-- 使用p名称空间给对象的属性注入值 -->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" p:userDao-ref="userDao"></bean>
<bean id="userAction" class="com.bie.service.UserAction" p:userService-ref="userService"></bean>
4:自动装配(了解即可),如下所示:
4.1:根据名称自动装配:
实现上面的前提是已经在对应的类中实现了下面的set方法和私有的类的成员变量的定义;
比如:在service层的方法中实现UserDao的定义和set方法的实现。
在action层的方法中实现UserService的定义和set方法的实现。
<!-- 自动装配
1:根据"名称"自动装配,userService注入的属性,会去IoC容器中自动查询和属性名称同名的对象
即在service层的方法中实现UserDao的定义的名称去和IoC容器(applicationContext.xml)中名称相同的。
-->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" autowire="byName"></bean>
<bean id="userAction" class="com.bie.service.UserAction" autowire="byName"></bean>
4.2:根据类型自动装配:(必须确保IoC容器[即applicationContext.xml]中只有一个该类型的对象)
实现上面的前提是已经在对应的类中实现了下面的set方法和私有的类的成员变量的定义;
比如:在service层的方法中实现UserDao的定义和set方法的实现。
在action层的方法中实现UserService的定义和set方法的实现。
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" autowire="byType"></bean>
<bean id="userAction" class="com.bie.service.UserAction" autowire="byType"></bean>
5:注解(优点简化配置,缺点不利于维护~~~作用把对象添加到IoC容器中),如下所示:
使用注解的开发步骤:《注解和xml配置可以一起使用的哦~~~》
(1):先引入context名称空间
xmlns:context="http://www.springframework.org/schema/context"
(2):开启注解扫描,指定扫描哪一个包下面的类;
<!-- 开启注解扫描 -->
<context:component-scan base-package="要扫描的包的名字"></context:component-scan>
(3):使用注解,通过注解的方式,把对象加入IoC容器中;
还有一种简写方式,直接写@Component 和 @Resource,
@Component加入IoC容器的UserDao对象的引用名称,默认和类名一样,且第一个字母小写。
@Resource去容器中找UserDao类型的变量,找到后赋值
(4):由于dao层,service层,action层都是用@Component注解容易造成混乱,不能区分是那一层的注解;
dao层(持久层):@Component--->@Repository
service层(业务逻辑层):@Component--->@Service
action层(控制层):@Component--->@Controller
1 package com.bie.dao; 2 3 import org.springframework.stereotype.Component; 4 5 /** 6 * @author BieHongLi 7 * @version 创建时间:2017年3月13日 上午10:42:24 8 * 9 */10 //注解的意思就是将userDao加入到IoC容器中11 //这个注解就相当于<bean id="userDao" class="com.bie.dao.UserDao">12 @Component("userDao") 13 public class UserDao {14 15 public void test(){16 17 }18 }
1 package com.bie.service; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author BieHongLi 9 * @version 创建时间:2017年3月13日 上午10:42:24 10 * 11 */12 //注解的意思就是将userService加入到IoC容器中13 //这个注解就相当于<bean id="userService" class="com.bie.service.userService">14 @Component("userService") 15 public class UserService {16 17 //这个注解会从IoC容器中找userDao对象,注入到当前字段18 @Resource(name="userDao")19 //这个注解相当于这个IoC容器的配置20 //<bean id="userService" class="com.bie.service.UserService">21 // <property name="userDao" ref="userDao"/>22 //</bean>23 24 //上面注解的userDao赋给下面的userDao的值了25 private UserDao userDao;26 27 public void test(){28 29 }30 }
1 package com.bie.action; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author BieHongLi 9 * @version 创建时间:2017年3月13日 上午10:42:24 10 * 11 */12 //注解的意思就是将userAction加入到IoC容器中13 //这个注解就相当于<bean id="userAction" class="com.bie.action.userAction">14 @Component("userAction") 15 public class UserAction {16 17 //这个注解会从IoC容器中找userService对象,注入到当前字段18 @Resource(name="userService")19 //这个注解相当于这个IoC容器的配置20 //<bean id="userAction" class="com.bie.action.userAction">21 // <property name="userService" ref="userService"/>22 //</bean>23 24 //上面注解的userService赋给下面的userService的值了25 private UserDao userService;26 27 public void test(){28 29 }30 }
Spring的IoC容器是个好东西啊~~~
- Spring之对象依赖关系(依赖注入Dependency Injection)
- Spring依赖注入(dependency injection)
- Dependency Injection 依赖注入
- Dependency Injection 依赖注入
- Dependency Injection 依赖注入
- spring依赖注入(dependency injection)
- 依赖注入(Dependency Injection)
- EJB---->依赖注入(dependency injection)
- 依赖注入 理解Dependency Injection
- 依赖注入 Dependency Injection (DI)
- Spring的核心机制:依赖注入(Dependency Injection)
- Spring的核心--依赖注入(Dependency Injection)
- Spring学习笔记(二)依赖注入Dependency Injection
- Spring学习四:依赖注入DI(Dependency Injection)
- 依赖注入DI(Dependency Injection)--属性注入
- EJB3.0学习笔记之四 依赖注入(dependency injection)
- Android修炼之道—依赖注入 Dependency Injection
- spring5.0 之依赖注入(Dependency Injection)
- Spring的核心之IoC容器创建对象
- Linux命令小结
- android-java对象序列化Object serialization
- 凤天赛磁石墨烯植物复合机油怎么样?
- Jar包详解和META-INF作用(…
- Spring之对象依赖关系(依赖注入Dependency Injection)
- informix笔记
- Spring框架+Struts2框架第一次整合
- 《Spark 官方文档》Spark配置
- oracle笔记
- Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- 2013年5月18日北京园博园之旅
- 第一次"正经面试"之发现自己的缺陷和不足
- nyoj 42 24 Point game