Spring1.1简介及入门——Spring容器相关

来源:互联网 发布:犀牛5.0mac中文版 编辑:程序博客网 时间:2024/06/01 10:48

简介

Spring框架的本质:通过XML配置去驱动Spring框架以反射执行Java代码。

Spring的IoC
依赖注入可分为3种:
     - 设值注入。 通过控制Spring调用setter方法来注入。
     - 构造器注入。 通过控制Spring调用有参数的构造器来注入。
     - 接口注入。少用
需明确概念:spring核心——依赖注入(DI、Dependency Injection)/ 控制反转(IoC、Inverse of Control)

关于Spring原理及机制,可参考:http://jiwenke.iteye.com/blog/493965以及https://www.cnblogs.com/ITtangtang/p/3978349.html#a1

入门

1、环境配置:

        (1)导入JAR包:


(2)增加一个Spring配置文件放在类路径下(或者文件系统路径。命名随意)


2、实例一

(1)POJO类

Dog.java

public class Dog {String kind;public String getKind() {return kind;}public void setKind(String kind) {this.kind = kind;}@Overridepublic String toString() {return "Dog [kind=" + kind + "]";}}
User.java

public class User {private String name;private int age;private Dog dog;public User(){}public User(String name,int age,Dog dog){super();this.name = name;this.age = age;this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ",I have a " + dog + "]";}}

(2)测试类

①使用无参构造器:

a.beans.xml配置

 

b.测试

c.此处发现

    调用构造器和执行setter方法在getBean方法调用之前。因为ApplicationContext默认支持预加载,也就是Spring在创建容器之时,就会自动创建容器中所有的singleton Bean,并立即根据property元素调用setter方法。可以通过在bean元素上指定:lazy-init属性或在beans上指定default-lazy-init属性为true来关闭预初始化。

    而BeanFactory并不支持预加载

    eg:

 

测试结果:


②使用有参构造器



3、实例二——国际化支持

(1) 编写两个国际化资源文件(中国、美国)

                      

(2)加载国际化资源文件

容器中一个名为messageSource,类型为ResourceBundleMessageSource的Bean用于管理国际化资源文件。(不能改)

ApplicationContext实现了MessageSource接口

在beans.xml中增加如下配置:


(3)测试

根据国际化消息的key来获取国际化消息


测试结果:


4、实例三——资源访问

(1)使用Resource访问底层资源

InfoBean.java

public class InfoBean {private Resource resource;private String charset;public Resource getResource() {return resource;}public void setResource(Resource resource) {this.resource = resource;}public String getCharset() {return charset;}public void setCharset(String charset) {this.charset = charset;}public void readInfo() throws UnsupportedEncodingException, IOException{BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream(),charset));String line ;while((line = br.readLine())!=null){System.out.println(line);}}}
(2)beans.xml配置


(3)测试

public void test() throws UnsupportedEncodingException, IOException{ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");InfoBean infoBean = (InfoBean)appContext.getBean("info1");infoBean.readInfo();}

5、事件机制

可参考:http://blog.csdn.net/blueboz/article/details/49949573

原创粉丝点击