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

简介

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;
	}

	@Override
	public 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;
	}
	@Override
	public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值