这一节我们介绍一下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讲的更多相关文章

  1. [刘阳Java]_Spring常用注解介绍_第6讲

    Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置.在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为 ...

  2. [刘阳Java]_MyBatis_实体关系映射_第8讲

    MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...

  3. [刘阳Java]_BeanNameViewResolver视图解析器_第8讲

    BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...

  4. [刘阳Java]_ResourceBundleViewResolver视图解析器_第7讲

    ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析"逻辑视图".该properties文件默认是放在classpath路径下的v ...

  5. [刘阳Java]_SpringMVC访问静态资源_第9讲

    有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等).其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径 &l ...

  6. [刘阳Java]_InternalResourceViewResolver视图解析器_第6讲

    SpringMVC在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器 InternalResourceViewResolver是SpringMVC中比较常用视图解析器. 网 ...

  7. [刘阳Java]_MyBatis_注解基本用法_第10讲

    MyBatis注解提出,可以说是非常好简化了MyBatis配置文件的使用.下面我们简单地来告诉大家如何使用MyBatis的注解 定义接口 package com.gxa.dao; import jav ...

  8. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  9. [刘阳Java]_Spring AOP注解详细介绍_第8讲

    这节内容非常关键,我们会比较详细地介绍Spring AOP注解的使用 1. 要使用Spring AOP注解,必须满足如下的事项 导入Aspectj的jar.Spring3.0-AOP.jar.aopa ...

随机推荐

  1. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

  2. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

  3. 如何为嵌入式应用选择适当的SSD

    如何为嵌入式应用选择适当的SSD Selecting the right SSD for evolving embedded applications 变革涉及技术的每一个要素,闪存也不例外.价格下跌 ...

  4. eclipse左边的工程列表窗口不见了解决方案

    解决eclipse左边的工程列表窗口看不到工程目录的方法: Window->Show View->Project Explorer(如果没有Project Explorer选项,则Wind ...

  5. Springboot中以配置类方式自定义Mybatis的配置规则(如开启驼峰映射等)

    什么是自定义Mybatis的配置规则? 答:即原来在mybatis配置文件中中我们配置到<settings>标签中的内容,如下第6-10行内容: 1 <?xml version=&q ...

  6. 【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞

    问题背景 什么是TCP timestamps(TCP 时间戳)? The remote host implements TCP Timestamps, as defined by RFC1323 (h ...

  7. Redis-持久化策略

    redis是一个内存数据库,一旦服务器宕机,内存中的数据将全部丢失.所以,对 Redis 来说,实现数据的持久化,避免从后端数据库中进行恢复,是至关重要的. 目前,Redis 的持久化主要有两大机制, ...

  8. 『居善地』接口测试 — 12、Moco框架介绍

    目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...

  9. Django(65)jwt认证原理

    前言 带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗? 什么是JWT? 为什么要用JWT?它有什么优势? JWT的认证流程是怎样的? JWT的工作原理? 我们 ...

  10. 学习响应式编程 Reactor (1) - 响应式编程

    响应式编程 命令式编程(Imperative Programing),是一种描述计算机所需做出的行为的编程范式.详细的命令机器怎么(How)去处理以达到想要的结果(What). 声明式编程(Decla ...