[刘阳Java]_Spring相关配置介绍_第5讲
这一节我们介绍一下Spring框架的相关常用配置
- Spring依赖注入的两种方式(构造方法注入和setter方式注入)
- p-namespace方式配置
- properties属性文件配置方式
- 集合对象配置方式
- Bean scopes作用域(单例作用域和原生作用域)
1. Spring依赖注入方式
- 构造方法注入,它相当于在Spring初始化对象的时候调用构造方法将其对象之间的依赖关系给注入到对象中
- 先在类中定义好依赖对象
- 再去定义构造方法,通过在构造方法的参数中设置对象的依赖关系
- 最后在Spring配置文件中使用<constructor-arg>标签搞定对象的依赖注入
package com.gxa.spring.day02;
public class PetServiceImpl {
private PetDaoImpl petDao; //依赖对象
public PetServiceImpl(PetDaoImpl petDao) { //构造方法的DI
this.petDao = petDao;
}
public void selectPet() {
petDao.selectPet();
}
}
package com.gxa.spring.day02;
public class PetDaoImpl {
public void selectPet() {
/**
* 完成宠物数据查询
*/
System.out.println("==宠物数据查询==");
}
}
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="petService" class="com.gxa.spring.day02.PetServiceImpl">
<constructor-arg name="petDao" ref="petDao"></constructor-arg>
</bean> <bean id="petDao" class="com.gxa.spring.day02.PetDaoImpl"></bean> </beans>
- 设值注入,它通过给依赖对象添加setter方法来完成对象的DI
- 先定义好依赖对象
- 再给依赖对象添加setter方法
- 最后在配置文件中使用<property.../>标签就OK了
package com.gxa.spring.day01;
public class PetServiceImpl {
private PetDaoImpl petDao; //依赖对象
private ItemDaoImpl itemDao; //依赖对象
public void setPetDao(PetDaoImpl petDao) {
this.petDao = petDao;
}
public void setItemDao(ItemDaoImpl itemDao) {
this.itemDao = itemDao;
}
public void selectPet() {
petDao.selectPet();
itemDao.selectItem();
}
}
package com.gxa.spring.day01;
public class PetDaoImpl {
public void selectPet() {
/**
* 完成宠物数据查询
*/
System.out.println("==宠物数据查询==");
}
}
package com.gxa.spring.day01;
public class ItemDaoImpl {
public void selectItem() {
/**
* 完成宠物分类数据查询
*/
System.out.println("==宠物分类的数据查询==");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" class="com.gxa.spring.day01.Person"></bean> <bean id="petService" class="com.gxa.spring.day01.PetServiceImpl">
<property name="petDao" ref="petDao"></property>
<property name="itemDao" ref="itemDao"></property>
</bean> <bean id="petDao" class="com.gxa.spring.day01.PetDaoImpl"></bean> <bean id="itemDao" class="com.gxa.spring.day01.ItemDaoImpl"></bean>
</beans>
2. p-namespace配置方式
- 主要去简化<property>标签的配置
- 要使用p-namespace需要在整个配置文件声明部分加入p-namespace的XMLSchema定义
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="petService" class="com.gxa.spring.day02.PetServiceImpl">
<constructor-arg name="petDao" ref="petDao"></constructor-arg>
</bean> <bean id="petDao" class="com.gxa.spring.day02.PetDaoImpl"></bean> <bean id="person" class="com.gxa.spring.day02.Person" p:petDao-ref="petDao"></bean> </beans>
3. properties属性文件配置,此配置可以利用Spring框架帮我们解析Java中的属性文件。下面我们介绍两种配置方法来解析Java中的属性文件
- <bean class=”org.springframework.beans.factory.config.PropertyPlaceholderConfiguer”>来解析Java中属性文件
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="jdbc.properties"></property>
</bean> <bean id="dbConnection" class="com.gxa.spring.day02.DBConnection"
p:username="${mysql.username}"
p:password="${mysql.password}"
p:driver="${mysql.driver}"></bean> </beans>
- <context:property-placeholder location=”jdbc.properties”>来解析Java中属性文件。这个需要在Spring配置文件的XMLSchema导入xmlns:context
<?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:property-placeholder location="jdbc.properties"/> <bean id="dbConnection" class="com.gxa.spring.day02.DBConnection"
p:username="${mysql.username}"
p:password="${mysql.password}"
p:driver="${mysql.driver}"></bean> </beans>
4. 集合对象的配置
- 在Spring框架配置文件中采用<list>,<Map>,<Set>,<Props>,可以帮我们来为集合对象进行对象初始化的工作。大家重点关注下面的代码
<?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="collectionsSpring" class="com.gxa.spring.day02.CollectionsSpring" scope="prototype">
<property name="list">
<list>
<value>Hello World</value>
<ref bean="dbConnection"/>
</list>
</property>
<property name="map">
<map>
<entry key="key01" value="Hello World"></entry>
<entry key="key02" value-ref="dbConnection"></entry>
</map>
</property>
<property name="set">
<set>
<value>Hello World</value>
<ref bean="dbConnection"/>
</set>
</property>
<property name="props">
<props>
<prop key="key01">Hello World</prop>
<prop key="key02">liuyang</prop>
</props>
</property>
</bean> </beans>
package com.gxa.spring.day02; import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; public class CollectionsSpring {
private List<?> list;
private Map<String,?> map;
private Set<?> set;
private Properties props; public void setList(List<?> list) {
this.list = list;
} public void setMap(Map<String, ?> map) {
this.map = map;
} public void setSet(Set<?> set) {
this.set = set;
} public void setProps(Properties props) {
this.props = props;
} public void showList() {
for (int i = 0; i <list.size(); i++) {
System.out.println(list.get(i));
}
} public void showMap() {
System.out.println(map);
} public void showSet() {
Iterator<?> iterator = set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
} public void showProps() {
Enumeration<?> enumeration = props.propertyNames();
while(enumeration.hasMoreElements()) {
System.out.println(props.getProperty(enumeration.nextElement().toString()));
}
}
}
5. Bean Scopes作用域
- Singleton:单例作用域,Spring容器初始化对象只有唯一个(默认)
- Prototype:原生作用域,每次调用Spring容器的getBean方法都会重新产生一个新的对象
- Request
- Session
- Global Session
这里重点还是谈一下单例作用域和原生作用域。在配置单例作用域和原生作用域需要使用scope属性
<?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="collectionsSpring" class="com.gxa.spring.day02.CollectionsSpring" scope="prototype">
<property name="list">
<list>
<value>Hello World</value>
<ref bean="dbConnection"/>
</list>
</property>
<property name="map">
<map>
<entry key="key01" value="Hello World"></entry>
<entry key="key02" value-ref="dbConnection"></entry>
</map>
</property>
<property name="set">
<set>
<value>Hello World</value>
<ref bean="dbConnection"/>
</set>
</property>
<property name="props">
<props>
<prop key="key01">Hello World</prop>
<prop key="key02">liuyang</prop>
</props>
</property>
</bean> </beans>
package com.gxa.spring.test02; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.gxa.spring.day02.CollectionsSpring;
import com.gxa.spring.day02.DBConnection;
import com.gxa.spring.day02.Person;
import com.gxa.spring.day02.PetServiceImpl; public class Test01 { @Test
public void m05() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
CollectionsSpring collectionsSpring01 = context.getBean("collectionsSpring", CollectionsSpring.class);
CollectionsSpring collectionsSpring02 = context.getBean("collectionsSpring", CollectionsSpring.class);
System.out.println(collectionsSpring01.hashCode());
System.out.println(collectionsSpring02.hashCode());
} }
[刘阳Java]_Spring相关配置介绍_第5讲的更多相关文章
- [刘阳Java]_Spring常用注解介绍_第6讲
Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置.在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为 ...
- [刘阳Java]_MyBatis_实体关系映射_第8讲
MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...
- [刘阳Java]_BeanNameViewResolver视图解析器_第8讲
BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...
- [刘阳Java]_ResourceBundleViewResolver视图解析器_第7讲
ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析"逻辑视图".该properties文件默认是放在classpath路径下的v ...
- [刘阳Java]_SpringMVC访问静态资源_第9讲
有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等).其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径 &l ...
- [刘阳Java]_InternalResourceViewResolver视图解析器_第6讲
SpringMVC在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器 InternalResourceViewResolver是SpringMVC中比较常用视图解析器. 网 ...
- [刘阳Java]_MyBatis_注解基本用法_第10讲
MyBatis注解提出,可以说是非常好简化了MyBatis配置文件的使用.下面我们简单地来告诉大家如何使用MyBatis的注解 定义接口 package com.gxa.dao; import jav ...
- [刘阳Java]_Spring AOP基于XML配置介绍_第9讲
基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...
- [刘阳Java]_Spring AOP注解详细介绍_第8讲
这节内容非常关键,我们会比较详细地介绍Spring AOP注解的使用 1. 要使用Spring AOP注解,必须满足如下的事项 导入Aspectj的jar.Spring3.0-AOP.jar.aopa ...
随机推荐
- 如何使用TVM Pass红外线
如何使用TVM Pass红外线 随着Relay / tir中优化遍数的增加,执行并手动维护其依赖关系变得很棘手.引入了一个基础结构来管理优化过程,将其应用于TVM堆栈中IR的不同层. Relay / ...
- 从单一图像中提取文档图像:ICCV2019论文解读
从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...
- RADAR和LIDAR区别分析
RADAR和LIDAR区别分析 如果一直关注自动驾驶汽车的新闻,可能已经注意到许多自动驾驶汽车制造商正在使用LIDAR(光成像检测和测距)进行车载物体检测.对于许多自动 驾驶汽车应用而言,LIDAR比 ...
- String类对象相加时做了什么
我们都知道java中的加号操作符除了加法.表示正数之外,还可以用作字符串的连接.初学java时,你很可能会碰到类似下面的题目: 以下这段代码产生了几个String对象: String str1 = & ...
- 重新整理 mysql 基础篇————— 事务隔离级别[四]
前言 简单介绍一下事务隔离的基本 正文 Read Uncommitted(未提交读) 这个就是读未提交.就是说在事务未提交的时候,其他事务也可以读取到未提交的数据. 这里举一个例子,还是前一篇的例子. ...
- NoSQL:如何使用NoSQL架构构建实时广告系统
JDNoSQL平台是什么 JDNoSQL平台是一个分布式面向列的KeyValue毫秒级存储服务,存储结构化数据和非机构化数据,支持随机读写与更新,灵活的动态列机制,架构上支持水平扩容,提供高并发.低延 ...
- some requirement checks failed
1.执行安装数据库软件时报错(./runInstaller): 解决:(1)su - root 执行: x host+ 然后 su - oracle 执行:./runIstal ...
- [Django REST framework - 序列化组件、source、钩子函数]
[Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...
- 95、配置ntp服务器
95.1.ntp简介: ntp服务使用的是udp的123端口,如果开启了防火墙要记得放开这个端口: NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步 ...
- 界面设计ie8 笔记
1.ie8 jsp中设置 margin:0 auto 无效 解决方法 在html 标签改为<!DOCTYPE html> 2.ie8 input file 无法通过js触发点击事件,网上 ...