一:spring是什么?
官方定义:spring是一个开源的,控制反转(inversion of control—>IOC),面向切面的容器框架。
个人理解:框架是一种工具,框架的存在是为了解耦合,实现代码的高复用,避免重复造轮子,而spring的出现就是解决这种问题。
二:使用spring的好处
1.降低组件之间的耦合度,实现软件各层之间的解耦
2.可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管3.理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播
4.容器提供单例模式支持,开发人员不再需要自己编写实现代码
5.容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能
6.容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate
7.Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发
三:spring的几个重要的概念
1.控制反转(IOC)
应用程序不负责依赖对象的维护,而是交给其他的程序去创建,这样,控制权就由应用转到的外部容器,控制权的转移,叫控制反转
2.DI(依赖注入)
在程序运行期,由外部容器把依赖对象传给应用的过程 (注进来),称为依赖注入
3.AOP(面向切面编程)
一种编程思想,和过滤器的思想很想
四:spring程序案例(初步体验IOC思想以及依赖注入)
1.项目目录结构
核心配置文件beans文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true" 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.xsd">
<bean name="userDao_name" class="com.dao.UserDaoImpl" lazy-init="true" scope="prototype"></bean>
<bean name="userServlet_name" class="com.servlet.UserServlet">
<property name="dao" ref="userDao_name"></property> <!-- 这是就是告诉spring,就是在运行的时候,创建这个出这个依赖对象,并注入进来 -->
</bean>
</beans>
实体类:
package com.beans;
public class UserInfo {
private Integer id;
private String userName;
private String pwd;
private String note;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", userName=" + userName + ", pwd=" + pwd + ", note=" + note + "]";
}
}
dao层:
package com.dao;
import com.service.IUserDao;
/*dao层,数据库访问层*/
public class UserDaoImpl implements IUserDao{
//添加用户
public void addUser() {
System.out.println("addUser");
}
//删除用户
public void delUser() {
System.out.println("delUser");
}
//修改用户
public void updateUser() {
System.out.println("updateUser");
}
}
业务层:
package com.service;
/*业务层,处理具体的事务*/
public interface IUserDao {
void addUser();
void delUser();
void updateUser();
}
测试类:
package com.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.servlet.UserServlet;
/*测试用例,运行servlet,测试spring的依赖注入*/
public class Test {
public static void main(String[] args) {
// 初始化spring的容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
// 由spring得到一个servlet的实例
UserServlet userServlet = ctx.getBean("userServlet_name", UserServlet.class);
//调用业务层实现servlet的方法
userServlet.doGet();
ctx.close();
}
}
总结:通过以上程序我们可以直接的感受到,和传统的对象在应用中直接创建不同,spring是通过工厂模式给在我们需要的时候给我们一个对象的实例,并且我们在配置beans的时候将数据访问层dao注入到servlet中,直接实现了对象创建和应用解耦合,在在我们需要不同的dao层的时候,我们只需在beans中修改就行,实现代码的高可用
spring方面的细节:对于spring来说,由spring创建的实例默认是单实例的,而且实例是在spring启动的时候直接创建,也可以设置成懒加载