浅谈 Spring 框架

Spring框架是分模块存在,除了最核心的Spring Core Container(即Spring容器)是必要模块之外,其他模块都是可选,视需要而定。大约有20多个模块。Spring的核心是控制反转(IoC)和面向切面(AOP)简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

一般来说,Spring主要分为7个模块:

构建项目

文件目录:

代码:

配置文件:applicationContext.

<?  version="1.0" encoding="UTF-8"?><beans  ns="http://www.spring work.org/schema/beans"	 ns:xsi="http://www.w3.org/2001/ Schema-instance"	xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd">		<bean id="hello" class="com.neuedu.hello.HelloWorld"></bean>	<bean id="userDaoOracle" class="com.neuedu.dao.impl.UserDaoOracleImpl"></bean></beans>

Test.java

package com.neuedu.test;import com.neuedu.hello.HelloWorld;import com.neuedu.service.UserService;import com.neuedu.dao.impl.UserDaoOracleImpl;import org.spring work.context.ApplicationContext;import org.spring work.context.support.ClassPath ApplicationContext;public class Test {	public static void main(String[] args) {		/*HelloWorld hw = new HelloWorld();		hw.say();*/		/*		ApplicationContext ac = new ClassPath ApplicationContext("applicationContext. ");		HelloWorld hw = (HelloWorld)ac.getBean("hello");		hw.say();		HelloWorld hw2 = (HelloWorld)ac.getBean("hello");		System.out.println(hw == hw2);*/				/*UserService us = new UserService();		us.save();*/				ApplicationContext ac = new ClassPath ApplicationContext("applicationContext. ");		UserDaoOracleImpl ud = (UserDaoOracleImpl)ac.getBean("userDaoOracle");		ud.save();			} }

ClassPath ApplicationContext 创建了一个 spring 容器,在容器中加载了一个配置文件(applicationContext. )
 通过配置文件可以读取到所有的bean标签(id/class)
 通过 class 可以 new 一个对象,class.forName("com.neuedu.hello.HelloWorld").newInstance();

UserDao.java

package com.neuedu.dao;public interface UserDao {	 public void save();}

UserService.java

package com.neuedu.service;import com.neuedu.dao.UserDao;import com.neuedu.dao.impl.UserDaoOracleImpl;import com.neuedu.dao.impl.UserDaoMysqlImpl;public class UserService {	//UserDaoOracleImpl dao = new UserDaoOracleImpl();	//UserDaoMysqlImpl udml = new UserDaoMysqlImpl();	UserDao dao = new UserDaoMysqlImpl();//new UserDaoOracleImpl();		public void save() {		dao.save();				//dao.insert();			}} 

UserDaoMysqlImpl.java

package com.neuedu.dao.impl;import com.neuedu.dao.UserDao;public class UserDaoMysqlImpl implements UserDao{	public void save() {		System.out.println("通过mysql数据库将用户信息保存到数据库中");	}}

UserDaoOracleImpl.java

package com.neuedu.dao.impl;import com.neuedu.dao.UserDao;public class UserDaoOracleImpl implements UserDao{	public void save() {		System.out.println("通过oracle数据库将用户信息保存到数据库中");	}		/*public void insert() {		System.out.println("通过mysql数据库将用户信息保存到数据库中");	}*/}

输出:

改进:控制反转(IOC)

上面的方法,UserDao 注入是通过 UserService 自身 new 一个 dao 实现类  下面方法 将控制权交给 sping 容器,因为Service 和

Dao 都在 spring中,故当 Service 需要 Dao 时,会自动将 dao 的实现类的对象放入 Service 中 

配置文件:applicationContext.

<?  version="1.0" encoding="UTF-8"?><beans  ns="http://www.spring work.org/schema/beans"	 ns:xsi="http://www.w3.org/2001/ Schema-instance"	xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd">		<bean id="hello" class="com.neuedu.hello.HelloWorld"></bean>	<bean id="userDaoOracle" class="com.neuedu.dao.impl.UserDaoOracleImpl"></bean>	<bean id="userService" class="com.neuedu.service.UserService">	<!-- SQL注入 -->		<property name="dao" ref="userDaoOracle"></property>	</bean></beans> 

Test.java

package com.neuedu.test;import com.neuedu.hello.HelloWorld;import com.neuedu.service.UserService;import com.neuedu.dao.impl.UserDaoOracleImpl;import org.spring work.context.ApplicationContext;import org.spring work.context.support.ClassPath ApplicationContext;public class Test {	public static void main(String[] args) {					ApplicationContext ac = new ClassPath ApplicationContext("applicationContext. ");		/*UserDaoOracleImpl ud = (UserDaoOracleImpl)ac.getBean("userDaoOracle");		ud.save();*/				UserService us = (UserService)ac.getBean("userService");		us.save();	} }

UserService.java

package com.neuedu.service;import com.neuedu.dao.UserDao;import com.neuedu.dao.impl.UserDaoOracleImpl;import com.neuedu.dao.impl.UserDaoMysqlImpl;public class UserService {	//UserDaoOracleImpl dao = new UserDaoOracleImpl();	//UserDaoMysqlImpl udml = new UserDaoMysqlImpl();	//UserDao dao = new UserDaoMysqlImpl();//new UserDaoOracleImpl();		private UserDao dao;		public void save() {		dao.save();				//dao.insert();			}	public UserDao getDao() {		return dao;	}	public void setDao(UserDao dao) {		this.dao = dao;	}} 

输出:

好处:Service 和 Dao 彻底解耦,只需更改配置文件:applicationContext. 中的调用即可

配置文件:applicationContext.

<?  version="1.0" encoding="UTF-8"?><beans  ns="http://www.spring work.org/schema/beans"	 ns:xsi="http://www.w3.org/2001/ Schema-instance"	xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd">		<bean id="hello" class="com.neuedu.hello.HelloWorld"></bean>	<bean id="userDaoMysql" class="com.neuedu.dao.impl.UserDaoMysqlImpl"></bean>	<bean id="userDaoOracle" class="com.neuedu.dao.impl.UserDaoOracleImpl"></bean>	<bean id="userService" class="com.neuedu.service.UserService">	<!-- SQL注入 -->		<property name="dao" ref="userDaoMysql"></property>	</bean></beans> 

输出:

 

收藏 打印