Spring基础

1,概述

Spring是一个依赖注入,控制反转的轻量级容器。

通常我们的程序都是三层,应用层,Service层,Dao层。

由应用层持有Service层的对象,调用Service层的方法实现应用;而Service层持有Dao层的对象,调用Dao层的方法实现Service。这些对象需要自己维护自己持有的对象。

而Spring这个容器只需将这些层的类注册到配置文件中,将需要持有那些对象声明,在调用时,Spring会自动维护这些对象,帮助我们new对象和维护对象。

 

Spring还具有面向切面编程特性,可以为某个类配置拦截器,在调用某个方法前调用拦截器方法。

 

Spring有七大模块:

Core:主要实现控制反转

AOP:主要实现面向切面特性

ORM:封装了主流ORM框架

DAO:统一管理JDBC资源和事务

Web:管理Struts,JSF,WebWork等Web框架

Context:提供类似JNDI机制访问各个类

Web MVC:Spring自己实现的Web MVC框架,比Struts简单

 

2,控制反转

控制反转中有几个重要角色:

Bean:交给Spring管理的类;

ApplicationContext:配置文件;

BeanDefinition:Bean在配置文件中的定义;

BeanFactory:创建Bean的工厂

1>例子

Dao层

public interface IDao {
	public void curd();
}
public class DaoImpl implements IDao{
	public void curd() {
		System.out.println("数据库增删改查完毕");
	}
}

Service层

public interface IService {
	public void service();
}
public class ServiceImpl implements IService{
	private IDao dao;
	public IDao getDao() {
		return dao;
	}
	public void setDao(IDao dao) {
		this.dao = dao;
	}
	public void service() {
		dao.curd();
	}
}

应用层

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import com.hellobbboy.service.IService;
public class Main {
	public static void main(String[] args) {
		XmlBeanFactory xmlBeanFactory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		IService service=(IService)xmlBeanFactory.getBean("serviceImpl");
		service.service();
	}
}

配置

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="daoImpl" class="com.hellobbboy.dao.DaoImpl"></bean>
	<bean id="serviceImpl" class="com.hellobbboy.service.ServiceImpl">
		<property name="dao" ref="daoImpl"></property>
	</bean>
</beans>


2><bean>配置详解

a>属性

id和class是必须有的;

单例模式:singleton="false";//Spring默认为单例

工厂模式:factory-method="newInstanceMethod"

初始化方法:init-method="initMethod"

销毁方法:destory-method="destoryMethod"

依赖对象:depends-on="anotherBean"(Spring默认按配置顺序加载Bean,如配置依赖对象,则在实例化前,先实例化依赖的对象)

b>子元素

1,注入其他bean:(最常用)

<property name="dao">
 <ref bean="dao"/>
</property>


2,注入集合:

List集合:
<property name="list">
 <list>
  <value></value>
 </list>
</property>
Set集合:

<property name="set">
 <set>
  <value></value>
 </set>
</property>
Map集合:

<property name="map">
 <map>
  <entry key="key">
   <value>value</value>
  </entry>
 </map>
</property>


3,注入Properties:

<property name="props">
 <props>
  <prop key="key">value</prop>
 </props>
</property>


PS:可以发现,除了注入Bean比较方便,其他类型的注入并不方便,企业通常使用配置文件方式,特别是数据库,但需导入一个Spring的Bean:

<!-- 导入并配置读取属性的Bean -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

<property name="location" value="classpath:bean.properties"/>

</bean>

这时配置其他类型是就可:

<bean id="oneBean" class="OneBean">

 <property name="key" value="${value}"/>

</bean>

而数据写在放在classpath下的bean.properties中:

value=param


4,构造函数参数:

<bean id="oneBean" class="OneBean">
 <constructor-arg><ref bean="anotherBean"/></constructor-arg>
 <constructor-arg><value>1<value/></constructor-arg>
</bean>

 

3,面向切面编程(AOP)

AOP把一个业务流程分成几个部分,例如权限检查、业务处理、日志记录,然后组装成完整的业务流程。

 

4,Best Practise

1>随web容器自动加载Bean:

在web.xml配置:

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   classpath*:daoContext.xml
   classpath*:repositoryContext.xml
   classpath*:presentationContext.xml
   classpath*:serviceContext.xml
    </param-value>
 </context-param>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值