标签:其他 hibernate 基于 方便 导入 导入jar包 tom art nts
几个常用框架之间的关系
Spring是一个开源、轻量级的Java 开发框架。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的核心是控制反转(IoC)和面向切面(AOP)。
分层: 一站式,每一个层都提供了解决方案;但是又可以只选择其中一层
web层:struts,spring-MVC
service层:spring
dao层:hibernate,mybatis , jdbcTemplate --> spring-data
l 方便解耦,简化开发 (高内聚低耦合)
l I AOP编程的支持
lII 声明式事务的支持
lV 方便程序的测试
V 方便集成各种优秀框架
Vl 降低JavaEE API的使用难度
core部分包含4个模块
aop部分包含4个模块
data access部分包含5个模块
web部分包含4个模块
需要导入的是字节码的jar包。
l 提供UserService接口和实现类
lI 获得UserService实现类的实例
在之前开发中,直接new一个对象即可。
在spring中,由Spring创建对象实例--> IoC 控制反转(Inverse of Control)
之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中
DI Dependency Injection ,依赖注入。
class B {
private A a; //B类依赖A类
}
依赖:一个对象需要使用另一个对象
注入:(IoC容器)通过setter方法进行另一个对象实例设置。
例如:
// B类(BookServiceImpl,是个service实现类),里面需要A类(BookDaoImpl,是个Dao实现类)来实现,
// 所以BookServiceImpl类依赖于BookDaoImpl类
class BookServiceImpl{ //之前的开发:接口 = 实现类 (service和dao耦合) //private BookDao bookDao = new BookDaoImpl(); //spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类) private BookDao bookDao; setter方法 }
模拟一下spring的执行过程:
创建service实例:BookService bookService = new BookServiceImpl() -->IoC容器来创建对象 <bean>来配置
创建dao实例:BookDao bookDao = new BookDaoImple() -->IoC 容器来创建对象
将dao设置给service:bookService.setBookDao(bookDao); -->DI <property>来配置,由IoC容器来注入依赖关系
//Dao接口 public interface BookDao { public void addBook(); } //Dao的实现类 public class BookDaoImpl implements BookDao { @Override public void addBook() { System.out.println("di add book"); } }
//service的接口 public interface BookService { public abstract void addBook(); } //service的实现类 public class BookServiceImpl implements BookService { // 方式1:之前,接口=实现类 // private BookDao bookDao = new BookDaoImpl(); // 方式2:接口 + setter private BookDao bookDao; public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } @Override public void addBook(){ this.bookDao.addBook(); } }
<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"> <!-- 模拟spring执行过程 创建service实例:BookService bookService = new BookServiceImpl() IoC <bean> 创建dao实例:BookDao bookDao = new BookDaoImpl() IoC 将dao设置给service:bookService.setBookDao(bookDao); DI <property> <property> 用于进行属性注入 name: bean的属性名,通过setter方法获得
name属性名的获得:setBookDao方法去掉“set” ##> BookDao 将其首字母小写 ##> bookDao(即得到name) ref :另一个bean的id值的引用(BookServiceImpl(B类)依赖于BookDaoImpl(A类)) --> <!-- 创建service --> <bean id="bookServiceId" class="com.itheima.b_di.BookServiceImpl"> <property name="bookDao" ref="bookDaoId"></property> </bean> <!-- 创建dao实例 --> <bean id="bookDaoId" class="com.itheima.b_di.BookDaoImpl"></bean> </beans>
@Test public void demo01(){ //从spring容器获得 String xmlPath = "com/itheima/b_di/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); BookService bookService = (BookService) applicationContext.getBean("bookServiceId"); bookService.addBook(); }
要创建bookService的实现,其执行过程:
先根据路径加载配置文件;读取配置文件,发现<property>中需要其他的东西,这里是需要Dao,spring容器就先new一个Dao出来,再回到new一个service,然后去执行其中的方法。
标签:其他 hibernate 基于 方便 导入 导入jar包 tom art nts
原文地址:https://www.cnblogs.com/JohnTeslaaa/p/10253346.html