重拾Spring之配置bean详解以及AppliactionContext基本功能

Spring是什么?

个人理解来看,Spring实质是一个超级大工厂,所有的Java对象都能由它来产生,它是所有对象的工厂。

假设现在有A组件与B组件,如果A组件中,需要调用B组件中的方法,那我们称A组件依赖于B组件,下面以Service和DAO为例。。。eg:Serivce中需要调用DAO中的方法,我们称Service依赖于DAO。

在没有Spring前,我们通常会在Service里出现类似这样的代码:UserDAO  userDao  = new UserDAOImpl(); 这样的去手动创建一个UserDAO的实例,这样做的坏处的Service层与DAO称耦合度很高;假如DAO的实现换了,Service也要跟着修改代码。。。之后我们引入了工厂模式,我们创建一个工厂类,在Service层调用DAO的工厂类去获取DAO组件,但是这样做,就会和工厂去耦合,也不是最佳选择。。。有了Spring,只要在service层提供DAO层的Set方法,然后在spring中配置,就能把DAO注入到Service中,完全解耦,当DAO实现修改了以后,只要修改配置文件即可。。。


控制反转(IOC)和依赖注入

1、setter设值注入

所谓setter注入,就是在注入时,调用需要注入组件的setter方法进行注入。。。

2、构造器注入

所谓构造器注入,就是利用构造器的参数,进行注入(好像是废话,呵呵!)

下面看一个例子,同时用到上面的两种方式

UserService.java

package com.tlf.service;

import com.tlf.DAO.UserDao;
import com.tlf.pojo.User;

public class UserService {

	private UserDao userDAO ;
	
	public void setUserDAO(UserDao userDAO) {
		this.userDAO = userDAO;
	}

	public void addUser(User user){
		userDAO.addUser(user);
	}
}
这里在Service层为DAO设置了setter方法。。显而易见这里是setter注入


UserDAOImpl.java

package com.tlf.DAOImpl;

import com.tlf.DAO.UserDao;
import com.tlf.pojo.User;

public class UserDAOImpl implements UserDao {

	@Override
	public void addUser(User user) {
		System.out.println("模拟向数据库插入数据"+ user.getUsername() + "-->" + user.getPass());
	}

}

SpringTest.java

package com.tlf.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tlf.pojo.User;
import com.tlf.service.UserService;

public class SpringTest {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		UserService us = ctx.getBean("userService", UserService.class);
		User u = ctx.getBean("user", User.class);
		us.addUser(u);
	}

}

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 运行到这句时,已经创建了Spring容器,并且 创建了容器中的Bean

这和BeanFactory是有区别的BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beans.xml")) 用BeanFactory只会创Spring容器,但没有创建里面的Bean;

实质上ApplicationContext是BeanFactory的子类,功能强大于BeanFactory。J2EE项目中大多也是使用ApplicationContext。。下面会介绍ApplicationContext大于BeanFactory的功能。。。

接下来看下最重要的beans.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="userDAO" class="com.tlf.DAOImpl.UserDAOImpl"/>

	<bean id="userService" class="com.tlf.service.UserService">
	<property name="userDAO" ref="userDAO"></property>
	</bean>

	<bean id="user" class="com.tlf.pojo.User">
	<constructor-arg value="tlf"></constructor-arg>
	<constructor-arg value="111111"></constructor-arg>
	</bean>

</beans>

注意:如果你要用setter注入,只要配置property属性即可,设置property 实质就是调用set+首字母大写的方法,eg:property name="abc" 实质调用了setAbc() 方法

<property name="userDAO" ref="userDAO"></property>  这里等于调用了setUserDAO方法,传入参数为userDAO,

ref表示引用容器中其他bean...看到<bean id="userService" class="com.tlf.service.UserService">,马上要反映出对应的Java代码为 userService = new UserService();

构造器注入就不多说了。。。。

接下来一篇文章会说到ApplicationContext比BeanFactory多的功能

1、国际化支持

2、支持资源访问(来自磁盘,网络,IO流,web应用的文件及数据)访问

3、加载多个配置文件

4、事件的支持


现在个人感觉任何一个东西,最重要的基础知识。一旦理解的框架的底层API,那样开发时候每一步都清清楚楚自己在干嘛。。所以以前的知识需要重拾!




                              

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值