【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 框架中, 绑定 ...
随机推荐
- Selenium2学习(十三)-- JS处理滚动条
前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候 ...
- JUnit报错:java.lang.ClassNotFoundException: com.mogodb.test.test
最近在使用JUnit做单元测试时,发现新写好的测试类运行总是出错,报找不到类异常. Class not found com.mogodb.test.test java.lang.ClassNotFou ...
- 【转】OpenGL概述
英文原文 中文译文 1. 计算机图像硬件 1.1 GPU(图像处理单元) 如今,计算机拥有用来专门做图像处理显示的GPU模块,拥有独立的图像处理储存(显存). 1.2 像素和画面 任何图像显示都是基于 ...
- 团队的初体验与Scrum的初识
一. 队名及宣言 队名: the better for you 宣言: Change our lives with code 二. 队员及分工 a.承担软件工程的角色 姓名 学号 角色 蒋 婷 B20 ...
- 通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法
Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它. 而容器产生的数据,会随着Pod消亡而自动 ...
- Android坡度计
艺术来源于生活,对我来说,编程也是一门艺术.今天发布这篇技术博客,就是我跟朋友在一次爬山过程中的争论,他跟我说那座山至少45度,我说没有,最多30度.我们彼此争论不休,于是我就想,为啥不写个手机程序来 ...
- 设计模式——策略模式(Strategy Pattern)
写在前面: 直接将书中的例子用来作为记录自己学习的成果,不知道这样好不好,如果给原作者带来什么不利的影响不妨告知一声,我及时删掉. UML图: 抽象策略:Strategy package com.cn ...
- js、Jquery处理自动计算的输入框事件
js在处理的时候可以使用oninput去获取当前输入框输入的值, jquery的时候使用了keypress和keydown但是发现都不能在输入后触发事件去获取输入框的值,这时候需要使用 ‘input ...
- 项目Alpha冲刺(团队7/10)
项目Alpha冲刺(团队7/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...
- 广义线性模型(GLM, Generalized Linear Model)
引言:通过高斯模型得到最小二乘法(线性回归),即: 通过伯努利模型得到逻辑回归,即: 这些模型都可以通过广义线性模型得到.广义线性模型是把自变量的线性预测函数当作因变量的估计值.在 ...