spring框架详解(spring框架基础知识)
前言本文选取Spring框架中的几个关键点进行介绍。Spring框架的诞生是为了让开发更加高效简洁,同时降低耦合度,这主要是一种思维的转变。如果你想了解更多关于Spring framework的知识,
可以查阅Spring官方文档,值得一看。
Spring简介在2002年,Rod Jahnson第一次介绍了Spring框架接口的雏形。2004年3月24日,Spring框架基于interface21。
经过重新设计,1.0正式版发布。Spring概念:让现有技术更实用本身就是一个大杂烩,把现有的框架技术整合起来。
官网:spring.io/官方下载地址:回购。春天。io/libs-releas…GitHub:GitHub。com/spring-proj…
org . Spring framework Spring-web MVC 5 . 3 . 3复制代码构成了Spring框架,它是一个层次化的架构,由七个定义良好的模块组成。Spring模块构建在核心容器之上。
核心容器定义了如何创建、配置和管理bean。组成Spring框架的每个模块(或组件)可以单独存在,也可以与一个或多个其他模块一起实现。每个模块的功能如下:
Spring Core核心容器提供了Spring框架的基本功能。Spring以bean的形式组织和管理Java应用程序中的组件及其关系。
Spring使用BeanFactory来生成和管理Bean,这是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用程序配置和依赖规范从实际的应用程序代码中分离出来。
Spring Context)Spring context是一个配置文件,它向Spring框架提供上下文信息。Spring上下文包括企业服务,
例如JNDI、EJB、电子邮件、国际化、校验和以及日程安排功能。Spring AOP使用配置管理特性,
Spring AOP模块直接将面向方面的编程功能集成到Spring框架中。因此,很容易使Spring框架管理的任何对象都支持AOP。
Spring AOP模块为基于Spring的应用程序中的对象提供事务管理服务。通过使用Spring AOP,声明式事务管理可以集成到应用程序中,而不依赖于EJB组件。
JDBC和DAO模块(Spring DAO)JDBC和DAO的抽象层提供了一个有意义的异常层次结构,可以用来管理不同数据库厂商抛出的异常处理和错误消息。异常层次结构简化了错误处理,
并且大大减少了需要编写的代码量,比如打开和关闭链接。对象-实体映射(Spring ORM)Spring framework插入了几个ORM框架,从而为ORM对象提供了一个关系工具。
其中包括Hibernate、JDO、IBatis SQL Map等。都遵循Spring的通用事物和DAO异常层次结构。
Web模块(Spring Web)Web上下文模块建立在应用程序上下文模块之上,它为基于Web的应用程序提供上下文。所以Spring框架支持与Struts的集成,
web模块还简化了处理多部分请求和将请求参数绑定到域对象的工作。MVC模块的MVC框架(Spring Web MVC)是一个用于构建Web应用程序的全功能MVC实现。通过策略界面,
MVC框架变得高度可配置。MVC包含了大量的视图技术,包括JSP、POI等。模型由JavaBean组成,存储在M中,而视图是一个街角,负责实现模型,控制器。。逻辑代码。
Spring框架的功能可以在任何J2EE服务器上使用,并且大部分功能也适用于非托管环境。
Spring的核心点是支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同的J2EE环境、独立的应用程序和测试环境中重用。
创建一个新的Maven项目,并在pom.xml中配置它。
spring framework spring-web MVC 5 . 3 . 3版本你有密码吗
先写一个用户实体类,User.java,
包com。傻逼。POJO公共类用户{私有字符串名称;公共字符串getName(){ return name;} public void set name(String name){ this。name=名称;} @将公共字符串重写为String(){ return ' Hello { ' ' name=' ' name ' \ ' ' ' } '}}复制代码再编写我们的春天文件,
xml version='1.0' encoding='UTF-8' org.aspectj aspectjweaver 1.9.4复制代码法一:通过Spring API实现编写业务接口UserService.java,
package com.idiot.service;public interface UserService { public void add(); public void delete(); public void update(); public void search();}复制代码再编写实现类UserServiceImpl.java,
package com.idiot.service;public class UserServiceImpl implements UserService{ @Override public void add() { System.out.println('增加用户'); } @Override public void delete() { System.out.println('删除用户'); } @Override public void update() { System.out.println('更新用户'); } @Override public void search() { System.out.println('查询用户'); }}复制代码然后开始AOP 环节,
package com.idiot.log;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class BeforeLog implements MethodBeforeAdvice { //method : 要执行的目标对象的方法 //args : 被调用的方法的参数 //target : 目标对象 @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println( target.getClass().getName() + '的' + method.getName() + '方法被执行了'); }}复制代码AfterLog.java
package com.idiot.log;import org.springframework.aop.AfterReturningAdvice;import java.lang.reflect.Method;public class AfterLog implements AfterReturningAdvice { //returnValue 返回值 //method被调用的方法 //args 被调用的方法的对象的参数 //target 被调用的目标对象 @Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println('执行了' + target.getClass().getName() +'的'+method.getName()+'方法,' +'返回值结果为:'+returnValue); }}复制代码最后编写配置文件进行Spring 中的注册,
xml version='1.0' encoding='UTF-8' org.aspectj aspectjweaver 1.9.4org.mybatis mybatis-spring 2.0.2org.projectlombok lombok 1.18.12providedsrc/main/java**/*.properties**/*.xmltrue复制代码编写实体类User.java,
package com.idiot.pojo;import lombok.Data;@Datapublic class User { private int id; //id private String name; //姓名 private String pwd; //密码 @Override public String toString() { return 'User{' + 'id=' + id + ', name='' + name + '\'' + ', pwd='' + pwd + '\'' + '}'; }}复制代码再编写接口UserMapper.java 及其映射文件UserMapper.xml,
package com.idiot.mapper;import com.idiot.pojo.User;import java.util.List;public interface UserMapper { public List selectUser();}复制代码UserMapper.xml
xml version='1.0' encoding='UTF-8' select * from user 复制代码紧接着编写核心配置文件mybatis-config.xml 以及外部配置文件db.properties,
xml version='1.0' encoding='UTF8' 复制代码db.properties
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3307/mybatis useSSL=falseuseUnicode=truecharacterEncoding=UTF-8复制代码最后进行测试,
import com.idiot.mapper.UserMapper;import com.idiot.pojo.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MyTest { @Test public void selectUser() throws IOException { String resource='mybatis-config.xml'; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(true); UserMapper mapper=sqlSession.getMapper(UserMapper.class); List userList=mapper.selectUser(); for (User user: userList){ System.out.println(user); } sqlSession.close(); }}复制代码MyBatis-Spring什么是MyBatis-Spring?MyBatis-Spring 就是帮助你将MyBatis 代码无缝地整合到Spring 中。
MyBatis-Spring | MyBatis | Spring 框架 | Spring Batch | JDK |
2.0 | 3.5+ | 5.0+ | 4.0+ | Java 8+ |
1.3 | 3.4+ | 3.2.2+ | 2.1+ | Java 6+ |
因此需要在pom.xml 中加入以下代码:
org.mybatis mybatis-spring 2.0.2复制代码要和Spring 一起使用MyBatis,
需要在Spring 应用上下文中定义至少两样东西:一个SqlSessionFactory 和至少一个数据映射器类。在MyBatis-Spring 中,
可使用SqlSessionFactoryBean来创建SqlSessionFactory。要配置这个工厂bean,只需要把下面代码放在Spring 的XML 配置文件中:
复制代码注意:SqlSessionFactory 需要一个DataSource(数据源),且是唯一的必要属性。这可以是任意的DataSource,
只需要和配置其它Spring 数据库连接一样配置它就可以了。在基础的MyBatis 用法中,
是通过SqlSessionFactoryBuilder 来创建SqlSessionFactory 的。而在MyBatis-Spring 中,
则使用SqlSessionFactoryBean 来创建。在MyBatis 中,你可以使用SqlSessionFactory 来创建SqlSession。一旦你获得一个session 之后,
你可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭session。一个常用的属性是configLocation,
它用来指定MyBatis 的XML 配置文件路径。它在需要修改MyBatis 的基础配置非常有用。通常,基础配置指的是 settings 或 typeAliases 元素。需要注意的是,
这个配置文件并不需要是一个完整的MyBatis 配置。确切地说,任何环境配置,数据源和MyBatis 的事务管理器都会被忽略。
SqlSessionFactoryBean 会创建它自有的MyBatis 环境配置(Environment),并按要求设置自定义环境的值。
SqlSessionTemplate 是MyBatis-Spring 的核心。作为SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的SqlSession。
模板(Template)可以参与到Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,
你应该总是用SqlSessionTemplate 来替换MyBatis 默认的DefaultSqlSession 实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。
可以使用SqlSessionFactory 作为构造方法的参数来创建SqlSessionTemplate 对象。
复制代码现在这个bean就可以直接注入到Mapper bean中,
package com.idiot.mapper;import com.idiot.pojo.User;import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{ //sqlSession不用我们创建,
package com.idiot.mapper;import com.idiot.pojo.User;import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{ //sqlSession不用我们自己创建了,
修改UserMapperImpl.java,
package com.idiot.mapper;import com.idiot.pojo.User;import org.mybatis.spring.support.SqlSessionDaoSupport;import java.util.List;public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{ public List selectUser() { UserMapper mapper=getSqlSession().getMapper(UserMapper.class); return mapper.selectUser(); }}复制代码修改applicationContext.xml 中bean 的配置,
复制代码测试,
总结: 整合到Spring 以后可以完全不要mybatis 的配置文件,除了这些方式可以实现整合之外,我们还可以使用注解来实现,
后记以上内容只是简略的有重点的描述了Spring 框架,要真正掌握还是需要自己继续深入学习的,谨记面向百度编程!