上文提到了 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框架的总结 (二)的更多相关文章

  1. 自己写一个java的mvc框架吧(二)

    自己写一个mvc框架吧(二) 自己写代码的习惯 写一个框架吧,如果这个框架会用到一些配置上的东西,我自己习惯是先不用考虑这个配置文件应该是怎样的,什么形式的,先用一个java对象(比如叫 Config ...

  2. JAVA总结--Spring框架全解

    一.Spring简介 Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业 ...

  3. [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)

    一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...

  4. spring框架学习(二)依赖注入

    spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普 ...

  5. java 之 Spring 框架(Java之负基础实战)

    1.Spring是什么 相当于安卓的MVC框架,是一个开源框架.一般用于轻型或中型应用. 它的核心是控制反转(IoC)和面向切面(AOP). 主要优势是分层架构,允许选择使用哪一个组件.使用基本的Ja ...

  6. 【Java】MyBatis与Spring框架整合(二)

    本文讲解 Spring 注入映射器及事务功能的实现. 注入映射器实现 MyBatis 可以使用 SqlSession 的 getMapper ( Class<T> type ) 方法,根据 ...

  7. Spring框架系列(二)之Bean的注解管理

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Spring中的两种容器 在系列(一)中我们已经知道,Spring 是管理对象的容器,其中有 ...

  8. java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))

    1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...

  9. Spring框架学习(二)

    一.Spring IOC参数值注入 1.注入基本值 1.1)<value></value>元素可以通过字符串指定属性或构造参数的值.容器将字符串从java.lang.Strin ...

  10. (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)

    在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...

随机推荐

  1. HTTPS科普(转)

    为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...

  2. Jmeter入门19 保存测试结果(或从文件读取结果)

    以聚合报告为例,其他监听器有write results to file的类似. 首先 为了避免每次保存的测试报告被覆盖,我们在testplan下添加两个参数:项目名和当前时间(毫秒级) 其次 添加聚合 ...

  3. python入门2 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  4. 在已有软件加壳保护 下实现 Inline hook

    如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 正常情况: 接到一个项目实现对屏幕输出内容的获取 ...

  5. libevent将信号封装为socket通知的核心代码

    #include"stdafx.h" #include"iostream" #include "algorithm" #include&qu ...

  6. JQuery前端技术记录

    [Jquery-leearning notes-2015]by lijun 1   Jquery是javascript实现的库,目标在于改变web应用的高交互性的方式. 其不唐突性:样式(.css). ...

  7. linux下vi的一些简单的操作

    前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...

  8. NTP原理初步与配置

    一.Ntp基本原理 Server和·Client之间的同步(C/S模式) 1.主机启动ntp daemon 2.Client向NTP Server 发送调较时间的申请 3.NTP Server发送标准 ...

  9. AQS2:可重入和阻塞

    本文仅基于可重入的锁(ReentrantLock类)对AQS做分析,只考虑独占锁. 共享锁与独占锁的更多信息,以后再讨论. AQS中队列的实现 节点Node AQS的节点包含了对前置节点的引用pre, ...

  10. vue中a的href写法

    注意点:href前面要加“:”或者v-bind: 2.字符串要用单引号“ ’ ”包住 加上了冒号是为了动态绑定数据,等号后面可以写变量. 如果不使用冒号,等号后面就可以写字符串等原始类型数据.这是就无 ...