对象依赖关系

Spring中,如何给对象的属性赋值?  【DI, 依赖注入】

1) 通过构造函数

2) 通过set方法给属性注入值

3) p名称空间

4)自动装配(了解)

5) 注解

一、对象属性赋值,通过构造函数

user

 public class User {

     private String userId;
private String username; public User() {
System.out.println("======不带参构造器=========");
} public User(String userId, String username) {
System.out.println("======带参构造器=========");
this.userId = userId;
this.username = username;
} public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @Override
public String toString() {
return "User [userId=" + userId + ", username=" + username + "]";
} }

bean.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 对象属性赋值 通过构造函数 -->
<bean id="user" class="com.liuyang.demo.property.User">
<constructor-arg index="0" value="100"></constructor-arg>
<constructor-arg index="1" value="小白兔"></constructor-arg>
</bean>
</beans>

测试

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/demo/property/beans2.xml"); @Test
public void test() {
User user = (User) aContext.getBean("user1"); System.out.println(user);
}
}

二、通过set方法给属性注入值

更改bean,其他不变

 <?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- set方法赋值 -->
<bean id="user1" class="com.liuyang.demo.property.User">
<property name="userId" value="101"></property>
<property name="username" value="大虎猫"></property>
</bean> </beans>

事例一个set方法传值案例:

创建userdao

 public class UserDAO {

     public void saveUser() {
System.out
.println("保存成功**********************************************"); } }

创建servicedao

 public class UserService {
private UserDAO dao; public void setDao(UserDAO dao) {
this.dao = dao;
} public void save() {
dao.saveUser();
} }

创建action

 public class UserAction {

     private UserService us;

     public void setUs(UserService us) {
this.us = us;
} public String execute() {
us.save();
return null;
} }

bean.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 对象属性赋值 通过构造函数 -->
<bean id="user" class="com.liuyang.test.DI.User">
</bean>
<!-- dao注入 -->
<bean id="dao" class="com.liuyang.test.DI.UserDAO">
</bean> <!-- service注入 -->
<bean id="us" class="com.liuyang.test.DI.UserService">
<property name="dao" ref="dao"></property>
</bean> <!-- action注入 -->
<bean id="userAction" class="com.liuyang.test.DI.UserAction">
<property name="us" ref="us"></property>
</bean>

测试

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/test/DI/beans2.xml"); @Test
public void test() {
UserAction userAction = (UserAction) aContext.getBean("userAction"); userAction.execute();
}
}

还有内部的bean写法如图,适用于只有一个dao和一个service的情况

 <?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 内部调用 dao和service在容器中只用一次,缺点不易维护-->
<bean id="userAction1" class="com.liuyang.test.DI.UserAction">
<property name="us">
<bean class="com.liuyang.test.DI.UserService">
<property name="dao">
<bean class="com.liuyang.test.DI.UserDAO"></bean>
</property>
</bean>
</property>
</bean>
</beans>

三、p名称空间的使用

(1)p引用的使用

保证约束条件有xmlns:p="http://www.springframework.org/schema/p"

更改bean.xml

 <!--
给对象属性注入值:
# p 名称空间给对象的属性注入值
(spring3.0以上版本才支持)
-->
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="user" class="com.liuyang.test.DI.User">
</bean>
<bean id="dao" class="com.liuyang.test.DI.UserDAO"></bean>
<bean id="us" class="com.liuyang.test.DI.UserService" p:dao-ref="dao"></bean>
<bean id="userAction" class="com.liuyang.test.DI.UserAction"
p:us-ref="us"></bean>
</beans>

(2)p传值的引用

 <?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="meinv" class="com.liuyang.test.DI.User" p:username="小白兔"></bean>
</beans>

p命名空间是一种优化

Spring框架总结(四)的更多相关文章

  1. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  2. 深入学习Spring框架(四)- 事务管理

    1.什么是事务? 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位.事务是为了保证数据库的完整性.例如:A给B转账,需 ...

  3. spring框架学习(四)——注解方式AOP

    注解配置业务类 使用@Component("s") 注解ProductService 类 package com.how2java.service; import org.spri ...

  4. Spring框架(四)AOP面向切面编程

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  5. Spring框架系列(四)--IOC控制反转和DI依赖注入

    背景: 如果对象的引用或者依赖关系的管理由具体对象完成,代码的耦合性就会很高,代码测试也变得困难.而IOC可以很好的解决这个问题,把这 些依赖关系交给框架或者IOC容器进行管理,简化了开发. IOC是 ...

  6. Spring框架第四篇之基于注解的DI注入

    一.说明 与@Component注解功能相同,但意义不同的注解还有三个: 1)@Repository:注解在Dao实现类上 2)@Service:注解在Service实现类上 3)@Controlle ...

  7. 使用Spring框架入门四:基于注解的方式的AOP的使用

    一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...

  8. Spring 框架介绍 [Spring 优点][Spring 应用领域][体系结构][目录结构][基础 jar 包]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 目录 ...

  9. Spring框架的第四天(整合ssh框架)

    ## Spring框架的第四天 ## ---------- **课程回顾:Spring框架第三天** 1. AOP注解方式 * 编写切面类(包含通知和切入点) * 开启自动代理 2. JDBC模板技术 ...

  10. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

随机推荐

  1. Tomcat中work目录

    Tomcat中work目录的作用: jsp运行时都要先转换成servlet,tomcat容器启动时会在目录下的work目录中生成一系列的文件夹和.java文件和编译后的.class文件. jsp最终转 ...

  2. Java复习——反射和泛型的复习

    反射 Class类 一个类被类加载器加载到内存之中,占有一片区域,这个空间里的内容就是类的字节码,不同的类的字节码是不一样的,这一个个空间页可以使用类来表示,这就是Class类. 根据这个概念可知:不 ...

  3. spring声明式事务管理详情解析

    前沿:通过对spring事务管理有了比较深入学习,本文将不做实例,而是指定具体的类和配置文件进行讲解. 本文内容: 1.了解什么是声明式事务? 2.声明式事务管理分别有哪几种? 3.这几种事务管理之间 ...

  4. LinkedHashMap学习

    一.概述 LinkedHashMap继承自HashMap,是Map接口的一个具体实现,它是有序的,可以按照插入顺序先后和访问时间先后进行排序,选择哪种排序方式取决于在新建LinkedHashMap的时 ...

  5. C# HTTP请求GET,POST

    转自原文 [C#]HTTP请求GET,POST HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删.一般情况下我们只用到GET和POST,其 ...

  6. Quartz.NET文档 入门教程

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  7. JAVA_01

    Java局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁: 访问修饰符不能用于局部变量: 局部变量只在声明它 ...

  8. 关于LOH(Large Object Heap)及内存泄漏

    关于LOH(Large Object Heap)的. .NET CLR中对于大于85000字节的内存既不像引用类型那样分配到普通堆上,也不像值类型那样分配到栈上,而是分配到了一个特殊的称为LOH的内部 ...

  9. 运维自动化工具 Kickstart

    简介: 批量安装操作系统工具之 Kickstart ,RedHat 早前推出的产品( 不多说了,现在都玩 Cobbler 啦 ). 测试环境:CentOS 6.6 x86_64 minimal 一.安 ...

  10. Git 搭建私有仓库

    简介: 如果你不想把自己的代码公开让别人阅读.使用,也不想花钱购买 GitHub 私有仓库,那么你就需要自己动手做一个了. 当然你也可以使用 Coding.net ,上面可以创建免费的私有仓库.( 今 ...