spring基本概念
1)struts2是web框架,hibernate是orm框架
2)spring是容器框架,创建bean,维护bean之间的关系
3)spring可以管理web层,持久层,业务层,dao层,spring可以配置各个层的组件,并且维护各个层的关系
spring核心原理
1.IOC控制反转
概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系。
核心:bean工厂
2.AOP面向切面编程
a.静态代理
根据每个具体类分别编写代理类
根据一个接口编写一个代理类
b.动态代理
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
简单的Spring入门案例
1、编写一个接口:IUserDao
package com.SpringTest.Dao;
public interface IUserDao {
public void getUserList();
}
2、编写一个接口的实现类:UserDaoMySQLImpl
package com.SpringTest.Dao;
public class UserDaoMySQLImpl implements IUserDao{
public void getUserList() {
System.out.println("Dao mysql 实现>>>>");
}
}
3、编写一个Service类:UserServiceMybatisImpl
package com.SpringTest.Service;
import com.SpringTest.Dao.IUserDao;
public class UserServiceMybatisImpl implements IUserService {
private IUserDao userdao;
// 依赖注入:1.Setter注入
public void setUserdao(IUserDao userdao) {
this.userdao = userdao;
}
public void getUsers() {
System.out.println("通过MyBatis获取用户....");
userdao.getUserList();
}
}
4、Spring配置文件
<?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.xsd">
<!-- 定义一个 bean -->
<bean id="user1" class="com.SpringTest.Bean.User">
<property name="id" value="2"></property>
<property name="username" value="springman"></property>
<property name="sex" value="male"></property>
<property name="address" value="FZ"></property>
</bean>
<!-- 定义一个UserService bean -->
<bean id="userService" class="com.SpringTest.Service.UserServiceMybatisImpl">
<property name="userdao" ref="userDao"></property>
</bean>
<!-- 定义一个UserService bean -->
<!-- 定义一个UserDao bean -->
<bean id="userDao" class="com.SpringTest.Dao.UserDaoMySQLImpl">
</bean>
<!-- 定义一个UserDao bean -->
<bean id="userDaoOracle" class="com.SpringTest.Dao.UserDaoOracleImpl">
</bean>
</beans>
5、编写一个测试类:UserTest
package com.SpringTest.SpringTest;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.SpringTest.Bean.User;
import com.SpringTest.Service.IUserService;
public class UserTest {
@Test
public void test01(){
//IOC:控制反转 控制权 原来右调用者决定 反转到 由外部容器所决定。
System.out.println("----方式二:调用者从Spring容器中获取 对象----");
//方式二:调用者从Spring容器中获取 对象 ,调用者不需要必须要识别对象类型。 对象的具体类型,不是由调用者所决定的,而是由外部容器决定。
//获取Spring容器上下文
ApplicationContext ac=new ClassPathXmlApplicationContext("com/SpringTest/utils/spring01.xml");
IUserService service=(IUserService)ac.getBean("userService");
service.getUsers();
}
}
6、运行结果
Spring总结
1.使用spring ,没有new对象,我们把创建对象的任务交给spring框架
2.spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.