【Java】关于Spring框架的总结 (二)
上文提到了 Spring 的 IoC 特性和 AOP 特性,只提到个别的实现方法。本文将对 IoC 和 AOP 其他方法进行讲解。
多种方式实现依赖注入
1.设值注入
上文中使用的注入方法:通过 setter 访问器实现对属性的赋值。
2.构造注入
通过类的构造方法实现属性的注入。
如何通过构造注入为业务类注入所依赖的数据访问层对象?下面是步骤
1)获取Spring开发包并为工程添加Spring支持。
2)为业务层和数据访问层设计接口,声明所需方法。
3)编写数据访问层接口UserDao的实现类,完成具体的持久化操作。
4)在业务实现类中声明UserDao接口类型的属性,并添加适当的构造方法为属性赋值。

5)在Spring的配置文件中将DAO对象以构造注入的方式赋值给业务实例中的 UserDao 类型的属性。

6)在代码中获取Spring配置文件中装配好的业务类对象,实现程序功能。
一个 <constructor-arg> 元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆,无法区分时,可以通过 <constructor-arg> 元素的 index 属性指定该参数的位置索引,位置从0开始。
3.使用 p 命名空间实现属性注入
p 命名空间的特点是使用属性而不是子元素的形式配置 Bean 的属性,从而简化了 Bean 的配置。注意使用前要先添加 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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

对于直接量(基本数据类型、字符串)属性 语法:
p:属性名="属性值"
对于引用 Bean 的属性 语法:
p:属性名-ref="Bean的id"
注入不同的数据类型
1.注入直接量(基本数据类型、字符串)
对于基本数据类型及其包装类、字符串,除了可以使用value属性,还可以通过 <value> 子元素进行注入。

2.引用其他 Bean 组件
Spring 中定义的 Bean 可以互相引用,从而建立依赖关系,除了使用 ref 属性,还可以通过 <ref> 子元素实现。

3.使用内部 Bean
如果一个Bean组件仅在一处需要使用,可以把它定义为内部Bean。

4.注入集合类型的属性
对于 List 或数组类型的属性,可以使用 <list> 标签注入。
<property name="hobbies">
<list>
<value>足球</value>
<value>篮球</value>
</list>
</property>
对于 Set 类型的属性,可以使用 <set> 标签注入。
<property name="hobbies">
<set>
<value>足球</value>
<value>篮球</value>
</set>
</property>
对于 Map 类型的属性,可以使用 <map> 标签注入。
<property name="hobbies">
<map>
<entry>
<key><value>football</value></key>
<value>足球</value>
<entry>
<entry>
<key><value>basketball</value></key>
<value>篮球</value>
<entry>
</map>
</property>
对于 Properties 类型的属性,可以使用 <props> 标签注入。
<property name="hobbies">
<props>
<prop key="football">足球</prop>
<prop key="basketball">篮球</prop>
</props>
</property>
5.注入 null 和空字符串值
<!-- 注入空字符串值 -->
<bean id="user" class="pojo.User">
<property name="email"><value></value></property>
</bean>
<!-- 注入 null 值 -->
<bean id="user" class="pojo.User">
<property name="email"><null/></property>
</bean>
其他增强类型
1.异常抛出增强
异常抛出增强的特点是在目标方法抛出异常时织入增强代码。使用异常抛出增强,可以为各功能模块提供统一的、可拔插的异常处理方案。
在增强类中添加异常抛出增强代码

在配置文件中添加异常抛出增强相关配置

2.最终增强
最终增强的特点是无论方法抛出异常还是正常退出,该增强都会得到执行,类似于异常处理机制中的 finally 块的作用,一般用于释放资源。
在增强类中添加最终增强代码

在配置文件中添加最终增强相关配置

3.环绕增强
环绕增强在目标方法的前后都可以织入增强处理。环绕增强是功能最强大的增强处理,Spring 把目标方法的控制权全部交给了它。在环绕增强处理中,可以获取或修改目标方法的参数、返回值,可以对它进行异常处理,甚至可以决定目标方法是否被执行。
在增强类中添加环绕增强代码

在配置文件中添加环绕增强相关配置

下次更新Spring注解相关配置
【Java】关于Spring框架的总结 (二)的更多相关文章
- 自己写一个java的mvc框架吧(二)
自己写一个mvc框架吧(二) 自己写代码的习惯 写一个框架吧,如果这个框架会用到一些配置上的东西,我自己习惯是先不用考虑这个配置文件应该是怎样的,什么形式的,先用一个java对象(比如叫 Config ...
- JAVA总结--Spring框架全解
一.Spring简介 Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业 ...
- [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)
一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...
- spring框架学习(二)依赖注入
spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普 ...
- java 之 Spring 框架(Java之负基础实战)
1.Spring是什么 相当于安卓的MVC框架,是一个开源框架.一般用于轻型或中型应用. 它的核心是控制反转(IoC)和面向切面(AOP). 主要优势是分层架构,允许选择使用哪一个组件.使用基本的Ja ...
- 【Java】MyBatis与Spring框架整合(二)
本文讲解 Spring 注入映射器及事务功能的实现. 注入映射器实现 MyBatis 可以使用 SqlSession 的 getMapper ( Class<T> type ) 方法,根据 ...
- Spring框架系列(二)之Bean的注解管理
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Spring中的两种容器 在系列(一)中我们已经知道,Spring 是管理对象的容器,其中有 ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
- Spring框架学习(二)
一.Spring IOC参数值注入 1.注入基本值 1.1)<value></value>元素可以通过字符串指定属性或构造参数的值.容器将字符串从java.lang.Strin ...
- (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
随机推荐
- HTTPS科普(转)
为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...
- Jmeter入门19 保存测试结果(或从文件读取结果)
以聚合报告为例,其他监听器有write results to file的类似. 首先 为了避免每次保存的测试报告被覆盖,我们在testplan下添加两个参数:项目名和当前时间(毫秒级) 其次 添加聚合 ...
- python入门2 python字符串换行显示、字符串太长\连接多行
#coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...
- 在已有软件加壳保护 下实现 Inline hook
如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 正常情况: 接到一个项目实现对屏幕输出内容的获取 ...
- libevent将信号封装为socket通知的核心代码
#include"stdafx.h" #include"iostream" #include "algorithm" #include&qu ...
- JQuery前端技术记录
[Jquery-leearning notes-2015]by lijun 1 Jquery是javascript实现的库,目标在于改变web应用的高交互性的方式. 其不唐突性:样式(.css). ...
- linux下vi的一些简单的操作
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...
- NTP原理初步与配置
一.Ntp基本原理 Server和·Client之间的同步(C/S模式) 1.主机启动ntp daemon 2.Client向NTP Server 发送调较时间的申请 3.NTP Server发送标准 ...
- AQS2:可重入和阻塞
本文仅基于可重入的锁(ReentrantLock类)对AQS做分析,只考虑独占锁. 共享锁与独占锁的更多信息,以后再讨论. AQS中队列的实现 节点Node AQS的节点包含了对前置节点的引用pre, ...
- vue中a的href写法
注意点:href前面要加“:”或者v-bind: 2.字符串要用单引号“ ’ ”包住 加上了冒号是为了动态绑定数据,等号后面可以写变量. 如果不使用冒号,等号后面就可以写字符串等原始类型数据.这是就无 ...