32.Spring-对象依赖.md
目录
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的更多相关文章
- Spring对象依赖关系
Spring中,如何给对象的属性赋值? [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 package loade ...
- Spring对象依赖关系处理
Spring中给对象属性赋值 1.通过set方法给属性注入值 2.p名称空间 3.自动装配 4.注解 编写MVCModel调用userAction MVCModel public class MVCM ...
- Java进阶知识18 Spring对象依赖关系的几种写法
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Spring IOC、对象依赖关系
Spring IOC.对象依赖关系 2016-09-21 01:36 414人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 引入 Strut ...
- Spring第三篇【Core模块之对象依赖】
前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...
- Spring的依赖注入(DI)三种方式
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...
- spring的依赖注入的最常见的两种方法
package com.lsz.spring.action; public class User { /** * set注入 */ private String username; public vo ...
- 一步一步深入spring(3)--spring的依赖注入方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...
随机推荐
- ISO-7816-1-2-3协议
第一部分:卡的电气特性一. 卡的触点分配IC卡触点的分配遵循ISO7816-2的规定,如下所示: C1 电源电压(Vcc) C5 地(GND) C2 复位信号(RST) C6 不使用 C3 时钟信号( ...
- Arrays.sort的粗略讲解
排序算法,基本的高级语言都有一些提供.C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array).用这些排序时,都可以写自己的排序规则. Java API对A ...
- 使用 libevent 和 libev 提高网络应用性能
使用 libevent 和 libev 提高网络应用性能 Martin C. Brown, 作家, Freelance 简介: 构建现代的服务器应用程序需要以某种方法同时接收数百.数千甚至数万个事件, ...
- 学习C++所需看的书和顺序
初学: <C++ 编程思想> <C++ Primer><The C++ Programming Language> 提高: <C++ 的发展与演化> & ...
- POJ-3261-Milk Patterns(后缀数组)
题意: 给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析: 先二分答案,然后将后缀分成若干组. 不同的是,这里要判断的是有没有一个组的后缀个数不小于k. 如果有,那么存在k ...
- 实战weblogic集群之安装weblogic
一.系统及软件版本 OS版本:Red Hat Enterprise Linux Server release 6.6WebLogic Server 版本: 10.3.3.0JDK版本:1.7.0_79 ...
- OC中的野指针(僵尸指针)
涉及到内存管理问题的都是类类型的变量,而在OC中我们操纵这些对象都是通过操纵指向他们的指针来完成的,一致很多时候会忽略指针存在.比如定义UIView * view = [[UIView alloc]i ...
- POJ 1417 True Liars
题意:有两种人,一种人只会说真话,另一种人只会说假话.只会说真话的人有p1个,另一种人有p2个.给出m个指令,每个指令为a b yes/no,意思是,如果为yes,a说b是只说真话的人,如果为no,a ...
- 常用Application Server
综述,我们这里列出的application server应用服务器,主要是对servlet和JSP提供了良好的支持; [resin] [Tomcat] [jboss] community.jboss. ...
- Libgdx New 3D API 教程之 -- Libgdx中使用Materials
This blog is a chinese version of xoppa's Libgdx new 3D api tutorial. For English version, please re ...