目录

1.对象依赖的分类

Spring中,给对象属性赋值的方法:

  • 构造函数
  • Set方法
  • p命名空间
  • 自动装配
  • 注解

1.1构造函数

构造方法通过配置文件中constructor-arg标签实现,使用时候需要注意要有带参的构造函数

1.2.Set方法

通过配置文件中property标签实现,使用时候需要注意要有无参构造方法和Getter Setter函数

1.3p命名空间

通过配置文件中p:XXX-ref=""标签实现,这里的引用也可换成使用实际值。

Spring 3.0以上版本支持

1.4自动装配

分为两种方式:

byName:会自动在对应类中寻找注入类名称一致的对象注入

byType:会自动在对应类中寻找注入类同类型的对象自动注入,但是要注意的是,一个类中只能有一个类型,不同同类型!

这两种配置方式可以全局配置,配置位置:

http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byType">

简化开发,但是不利于后期维护,不推荐使用。

1.5注解

注解的的好出是简化配置文件的维护

1.5.1关键字

通过注解完成依赖和注入:

  • @Repository:对应持久层
  • @Service:对应业务层
  • @Controller:对应控制层
  • @Resource:表示要注入的对象
  • 配置文件中,通过开启扫描告知Spring使用注解

1.5.2注意事项

  • @Component做为通用关键字可以替代@Repository、@Service和@Controller,但是不建议在对应类中这么写,因为不利于理解和维护。
  • 对应的注解关键字可以不写,Spring会自动根据需要的类按照类名首字母小写的方式自动查找。但是这样同样不利于开发维护,不建议。

2.实例

对于构造函数和Set方法,使用User类示例。p命名空间模拟开发过程

2.1先创建各对象,注意需要的构造和Getter Setter方法

package per.liyue.springlearing.structure;

/**
* Created by liyue on 2016/11/10.
*/
public class User
{
private int userId;
private String userName; @Override
public String toString()
{
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
'}';
} public User()
{
} public User(int userId, String userName)
{
this.userId = userId;
this.userName = userName;
} public int getUserId()
{
return userId;
} public void setUserId(int userId)
{
this.userId = userId;
} public String getUserName()
{
return userName;
} public void setUserName(String userName)
{
this.userName = userName;
}
}
package per.liyue.springlearing.structure;

/**
* Created by liyue on 2016/11/10.
*/
public class UserDao
{
public void Save()
{
System.out.println("执行了Save方法保存数据");
}
}
package per.liyue.springlearing.structure;

/**
* Created by liyue on 2016/11/10.
*/
public class UserService
{
public UserDao getUserDao()
{
return userDao;
} public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
} private UserDao userDao; public void Save()
{
userDao.Save();
} }
package per.liyue.springlearing.structure;

/**
* Created by liyue on 2016/11/10.
*/
public class UserAction
{
private UserService userService; public String execute()
{
userService.Save();
return null;
} public UserService getUserService()
{
return userService;
} public void setUserService(UserService userService)
{
this.userService = userService;
}
}

2.2配置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" > <!--1.构造函数方法
注意要有对应的带参构造方法
-->
<bean id="userC" class="per.liyue.springlearing.structure.User" scope="prototype">
<constructor-arg value="1"></constructor-arg>
<constructor-arg value="张三"></constructor-arg>
</bean> <!--2.Set方法
注意要有无参构造方法和Getter Setter函数
-->
<bean id="userS" class="per.liyue.springlearing.structure.User" scope="prototype">
<property name="userId" value="2"></property>
<property name="userName" value="李四"></property>
</bean> <!--3.p命名空间
注意要有Getter Setter函数
-->
<!--
<bean id="userDao" class="per.liyue.springlearing.structure.UserDao"></bean> <bean id="userService" class="per.liyue.springlearing.structure.UserService" p:userDao-ref="userDao"></bean> <bean id="userAction" class="per.liyue.springlearing.structure.UserAction" p:userService-ref="userService"></bean>
--> <!--4.自动装配
分为两种方式:
byName:会自动在对应类中寻找注入类名称一致的对象注入
byType:会自动在对应类中寻找注入类同类型的对象自动注入,但是要注意的是,一个类中只能有一个类型,不同同类型!
这两种配置方式可以全局配置,配置位置:
http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byType">
-->
<bean id="userDao" class="per.liyue.springlearing.structure.UserDao"></bean> <bean id="userService" class="per.liyue.springlearing.structure.UserService" autowire="byName"></bean> <bean id="userAction" class="per.liyue.springlearing.structure.UserAction" autowire="byType"></bean> </beans>

2.3模拟调用

package per.liyue.springlearing.structure;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by liyue on 2016/11/10.
*/
public class App
{
private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("per/liyue/springlearing/bean.xml"); @Test
public void Main()
{
User user1 = applicationContext.getBean("userC", User.class);
System.out.println("1.构造方法方式为对象属性赋值" + user1); User user2 = applicationContext.getBean("userS", User.class);
System.out.println("2.Set方法方式为对象属性赋值" + user2); UserAction userAction = applicationContext.getBean("userAction", UserAction.class);
System.out.println("3.p命名空间方法执行:");
userAction.execute(); }
}

2.4输出

1.构造方法方式为对象属性赋值User{userId=1, userName='张三'}

2.Set方法方式为对象属性赋值User{userId=2, userName='李四'}

3.p命名空间方法执行:

执行了Save方法保存数据

2.5注解方式

将上述的类修改:

2.5.1持久层

package per.liyue.springlearing.obj_dep;

import org.springframework.stereotype.Repository;

@Repository(value = "userDao")
public class UserDao
{
public void Save()
{
System.out.println("操作数据保存了数据");
}
}

2.5.2业务层

package per.liyue.springlearing.obj_dep;

import org.springframework.stereotype.Service;
import per.liyue.springlearing.structure.UserDao1; import javax.annotation.Resource; @Service(value = "userService")//这里等于配置文件中<bean id="userDao" class="per.liyue.springlearing.structure.UserDao"></bean>
//的方式
public class UserService
{
@Resource(name = "userDao")
private UserDao1 userDao; public void Save()
{
userDao.Save();
} }

2.5.3控制层

package per.liyue.springlearing.obj_dep;

import org.springframework.stereotype.Controller;
import per.liyue.springlearing.structure.UserService1; import javax.annotation.Resource; @Controller(value = "userAction")
public class UserAction
{
@Resource(name = "userService")
private UserService1 userService; public void Excute()
{
userService.Save();
}
}

2.5.4配置文件

<?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" > <context:component-scan base-package="per.liyue.springlearing.obj_dep"></context:component-scan>
</beans>

2.5.5调用

package per.liyue.springlearing.obj_dep;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App_Dep
{
private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("per/liyue/springlearing/obj_dep/bean.xml"); @Test
public void Main()
{
UserAction userAction = applicationContext.getBean("userAction", UserAction.class);
System.out.println("使用注解生成:");
userAction.Excute();
}
}

32.Spring-对象依赖.md的更多相关文章

  1. Spring对象依赖关系

    Spring中,如何给对象的属性赋值?  [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间   4)自动装配(了解) 5) 注解 package loade ...

  2. Spring对象依赖关系处理

    Spring中给对象属性赋值 1.通过set方法给属性注入值 2.p名称空间 3.自动装配 4.注解 编写MVCModel调用userAction MVCModel public class MVCM ...

  3. Java进阶知识18 Spring对象依赖关系的几种写法

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. Spring IOC、对象依赖关系

    Spring IOC.对象依赖关系   2016-09-21 01:36 414人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 引入 Strut ...

  5. Spring第三篇【Core模块之对象依赖】

    前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...

  6. Spring.NET依赖注入框架学习-- 泛型对象的创建和使用

    Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...

  7. Spring的依赖注入(DI)三种方式

    Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...

  8. spring的依赖注入的最常见的两种方法

    package com.lsz.spring.action; public class User { /** * set注入 */ private String username; public vo ...

  9. 一步一步深入spring(3)--spring的依赖注入方式

    对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...

随机推荐

  1. Delphi 指针大全(光看不练是学不会的)

    大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针.Basic不支 ...

  2. 如何开发Android Wear应用程序

    Android Wear是连接安卓手机和可穿戴产品的一个平台.自从今年上半年发布以来,Android Wear获得了大量关注,既有来自消费者的关注,也有来自开发商的关注,后者希望自己的应用程序已经准备 ...

  3. Linux下安装软件心得

    1 软件安装方法: 源代码编译安装:tar.gz等压缩格式,需要经过手动编译,./configure,make ,make install ,然后进行配置操作 二进制安装:tar.gz等压缩格式,解压 ...

  4. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux

    安装 Android Studio详细教程 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jdk1.8.0_25 android-st ...

  5. phpMyAdmin import.php 安全漏洞

    漏洞名称: phpMyAdmin import.php 安全漏洞 CNNVD编号: CNNVD-201307-068 发布时间: 2013-07-05 更新时间: 2013-07-05 危害等级:   ...

  6. gif动画问题

    iOS没有自带支持显示gif动画的功能,  用UIImageView的animationImage虽然可以实现图片动画, 当毕竟不方便. http://blog.stijnspijker.nl/200 ...

  7. 图论(网络流):COGS 410. [NOI2009] 植物大战僵尸

    410. [NOI2009] 植物大战僵尸 ★★★   输入文件:pvz.in   输出文件:pvz.out   简单对比时间限制:2 s   内存限制:512 MB [问题描述] Plants vs ...

  8. C#调用Exe文件的方法及如何判断程序调用的exe已结束

    很简单的代码就可以实现C#调用EXE文件,如下: 引入using System.Diagnostics; 调用代码: Process.Start(exe文件名); 或直接 System.Diagnos ...

  9. 数学概念——H 最美素数

    H - 数论,晒素数 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  10. Response.End(); 用HttpContext.Current.ApplicationInstance.CompleteRequest 代替

    Response.End(); 会报异常 HttpContext.Current.ApplicationInstance.CompleteRequest 这里有个讨论的帖子很有意思:http://q. ...