目录
1. Web MVC发展史历程
2.Spring概要
3.Spring-依赖注入概要(IOC)
4.属性注入的三种实现方式
5.Spring-IoC XML装配
6.Spring-XML设置Bean的值
7.Spring-IoC 注解(1)
8.Spring-IoC 注解(2)
9.Spring-AOP切面编程(1)
10.Spring-AOP切面编程(2)
未完待续...
未完待续...
一、简介
有些时候Spring装配Bean的时候,我们需要初始化一些属性的时候,我们就需要在bean中定义
- 构造注入
- setter注入
- 自动装配
二、constructor-arg
- 说明
通过指定构造方法的参数来实例化Bean - 可选属性
属性 说明 type 根据参数的类型,避免构造方法冲突 value 用于指定字符串类型、基本类型的属性值 name 属性的名称 ref 关联其它类型 index 对应于构造函数的多个参数,index属性的值从0开始 - 示例代码
java代码
xml代码public class Shop { private int shopId; private String title; private String name; public Shop() { } public Shop(int shopId, String title) { this.shopId = shopId; this.title = title; } public Shop(String title, String name) { this.title = title; this.name = name; } public Shop(int shopId, String title, String name) { this.shopId = shopId; this.title = title; this.name = name; } public int getShopId() { return shopId; } public void setShopId(int shopId) { this.shopId = shopId; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Shop{" + "shopId=" + shopId + ", title='" + title + '\'' + ", name='" + name + '\'' + '}'; } }
测试代码ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Shop shop = context.getBean("shop", Shop.class); System.out.println(shop.toString());
三、property
- 说明
在 Spring 配置文件中,我们也可以通过 Bean 的属性 property 进行参数注入。使用 property 属性不但可以将 String、int 等字面值注入到 Bean 中,还可以将集合、Map 等类型注入到 Bean 中,此外还可以注入其他的 Bean
必须提供setter方法,因为需要通过名字自动装配 - 可选属性
属性 说明 name 属性的名称 value 主要是配置基本类型的属性值, ref 但是如果我们需要为Bean设置属性值是另一个Bean实例时,这个时候需要使用 元素。使用 元素可以指定如下两个属性。bean:引用不在同一份XML配置文件中的其他Bean实例的id属性值。local:引用同一份XML配置文件中的其他Bean实例的id属性值 - 示例代码
java代码
xml配置public class Shop { ... private ShopDetail detail; public void setDetail(ShopDetail detail) { this.detail = detail; } public ShopDetail getDetail() { return detail; } } public class ShopDetail { private String desc; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }
测试代码ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Shop shop = context.getBean("shop", Shop.class); System.out.println(shop.getDetail().getDesc());
四、autowire
- 说明
在bean标签上通过autowire属性;或者在beans标签上通过default-autowire属性实现自动装配 - 可选值
可选值 说明 no 不使用自动装配。Bean的引用必须通过ref元素定义。 byName 根据属性名自动装配。BeanFactory查找容器中的全部Bean,找出其中id属性与属性同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入 byType 如果BeanFactory中正好有一个同属性类型一样的bean,就自动装配这个属性。如果有多于一个这样的bean,就抛出一个致命异常,它指出你可能不能对那个bean使用byType的自动装配。如果没有匹配的bean,则什么都不会发生,属性不会被设置。如果这是你不想要的情况(什么都不发生),通过设置dependency-check="objects"属性值来指定在这种情况下应该抛出错误。 constructor 这个同byType类似,不过是应用于构造函数的参数。如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则一个致命的错误会产生。 default 采用父级标签(即beans的default-autowire属性)的配置。 - 示例代码
java代码
根据属性名来加载public class Application { private User user; public Application(User user) { this.user = user; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } public class User implements Serializable { private String id; private String name; private String sex; private Integer age; public void destroy() { System.out.println("销毁!"); } public void init() { System.out.println("初始化!"); }
根据类型来加载
根据构造方法来加载// java代码 public Application(User user) { this.user = user; } // xml配置
五、注入参数值详解
1、说明
在 Spring 配置文件中,用户可以通过 Bean 的属性 property 进行参数注入。使用 property 属性不但可以将 String、int 等基本注入到 Bean 中,还可以将List、Set、Map ,Properties等类型注入到 Bean 中,此外还可以注入其他的 Bean
2、基本类型注入
- 概要
一般是指可用字符串表示的值,这些值可通过
元素标签进行注入。在默认情况下,基本数据类型及其封装类、String 等类型都可以采取字面值注入的方式 - 示例代码
public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
3、引入其他Bean
- 概要
Spring IoC 容器中定义的 Bean 可以互相引用。元素可以通过 bean、local、parent 三个属性引用其他 Bean 的属性,
- bean 可以引用统一配置文件中或者父容器中的 Bean
- local 只能引用同一配置文件中的 Bean
- parent 只能引用父容器中的 Bean
- 示例代码
见property案例
4、内部Bean
- 概要
只会被当前的Bean所引用,不能被其它Bean引用 - 示例代码
5、级联设置属性
- 概要
如果你想直接设置关联Bean的属性的值,可以设置级联属性 - 示例代码
6、list
7、map
- 说明
元素进行装配,然后通过多个
元素设值,只是entry
包含一个键值对的设置,也可以使用key-ref
属性去引用之前定义好的 Bean 作为键,而用value-ref
属性引用之前定义好的 Bean 作为值 - 示例代码
8、set
9、array
- 说明
可以通过多个
元素设值 - 示例代码
1 2 3
10、properties
- 说明
元素进行装配,通过多个
元素设值,只是properties
元素有一个必填属性key
,然后可以设置值 - 示例代码
v1
11、其它
- 集合合
子Bean可以继承父Bean的同名属性集合元素,并且使用merge属性选择是否合并,默认不合并。 - 示例代码
1 2 3 4 5
12、总结
- value:指定集合元素是基本数据类型或者字符类型值。
- ref:指定集合元素师容器中另一个Bean实例。
- bean:指定集合元素是一个嵌套Bean。
六、命名空间装配
1、概要
除了上述的配置方式外,Spring3.0以上的版本还为上述的方式提供了一些简写方式
2、c
- 说明
命名空间-c属性名以 “c:” 开头,也就是命名空间的前缀,通过构造器注入的方式来配置 bean,接下来就是要装配的构造器参数名 - 示例代码
3、p
- 说明
命名空间-p通过setter的注入方式来配置 bean - 示例代码
4、util
- 说明
工具类的命名空间,可以简化集合类元素的配置 - util命名空间表
元素 描述 创建一个 java.util.List
类型的 bean,其中包含值或引用创建一个 java.util.map
类型的 bean,其中包含值或引用创建一个 java.util.Properties
类型的 bean引用一个 bean 的属性(或内嵌属性),并将其暴露为 bean 创建一个 java.util.Set
类型的 bean,其中包含值或引用引用某个类型的 public static
域,并将其暴露为 bean
5、util:list
- 说明
可以通过util:list
来定义一个java.util.List
类型的bean,其子元素就是对应的List的元素,其子元素可以是一切可以用来定义对象的元素,比如value、bean等,
默认元素的值是String类型,可以通过value-type
属性指定元素值的类型,比如数字类型则指定value-type="java.lang.Integer"
默认生成的是java.util.ArrayList
类型的List,如果需要使用其它类型的List,则可以通过list-class
来指定。比如下面就指定了生成的List是java.util.LinkedList
- 示例代码
1 2 3
6、util:map
- 说明
通过util:map
来定义一个Map类型的, Map中的每一个Entry则由其子元素entry来定义。每个Entry的key和value可以通过entry元素的key和value属性来定义
默认key和value的值是String类型,如果想修改类型可以通value-type
属性指定value的类型,如果是复制的类型可以通过value-ref来引入
默认生成的是`java.util.HashMap,如果想使用其他类型的Map,可以通过map-class来指定 - 示例代码
7、util:set
- 说明
通过util:set
来定义一个java.util.Set
类型的bean。它的用法和util:list
是类似的。
通过value子元素指定的值默认也是java.lang.String
类型,可以通过value-type
属性来指定元素类型
默认生成的Set是java.util.LinkedHashSet
类型,可以通过set-class
属性来指定生成的Set的类型 - 示例代码
1 2 3
8、util:properties
- 说明
可以通过util:properties
快速的定义一个Properties对象,可以通过其子元素
来定义一个Properties的元素,key对应属性名,而
元素中间的文本值则为对应的属性值
util:properties
的内容也可以来自一个外部文件,此时可以通过location属性引用对应的外部文件,通过location属性指定的本地文件也可以是多个,多个文件之间可以通过英文的逗号分隔 - 示例代码
a b
9、util:constant
- 说明
util:constant
可以把一个常量定义为bean容器中的一个bean,可以通过id属性指定对应的bean的id。static-field
用来指定引用的static变量,需要是public类型的 - 示例代码
public static final Integer ERROR = -1;
10、util:property-path
- 说明
util:property-path
可以用来把某个bean的某个属性的值定义为一个bean, - 示例代码