Spring

Spring

spring简介

​ spring是一个开源的、非侵入式的、“一站式”的轻量级框架,它大大简化了Java企业级开发。

​ spring框架是由20个功能模块组成。这些模块被分为六个部分、分别是Core、Container、DataAccess/Antegration、Wed、AOP、Instrumentation和Test

spring优势和核心功能
  1. 优势

    1. 非侵入式编程

      ​ 不需要继续类,不需要实现接口

    2. 支持JavaEE三层开发

      1. 数据库:支持mybaits,hibernate,封装jdbc
      2. 业务逻辑层:ioc,aop
      3. 表现层:对页面框架有支持,springmvc,struct2
  2. spring核心功能:

    1. IoC:控制反转:将new对象的权利交给了xml

      ​ DI:依赖注入

    2. AOP:面向切面编程
      在不改变以前代码的流程下,加入一段代码

Spring体系结构图

在这里插入图片描述

Spring IoC

​ Spring IoC(Inversion of Control):控制反转。就是将new对象的权利交给了Spring容器。其意义是用来降低程序代码之间的耦合度。

搭建spring ioc的框架
  1. 导入jar

    	<dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
        </dependency>
  2. 配置文件

    <?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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="zhang" class="pojo.Greeting">
            <property name="person" value="张嘎子"></property>
            <property name="words" ref=""></property>
        </bean>
    </beans>
    1. id:表示定义的Bean实例的名称
    2. class:放实例类的全映射路径或别名
    3. name:是属性名
    4. value:是给属性赋值
    5. ref:是个属性的引用bean id
  3. 测试

    pplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    PetStoreService service = context.getBean("zhang");
    List<String> userList = service.getUsernameList();

Spring AOP

​ AOP(Aspect Oriented Programming):面相切面编程。简单来说就是在不改变原程序的基础上为代码添加新的共能,对代码进行增强处理。

​ Spring AOP并不是一段完整的AOP理念,只是用了AOP的思想。延续了AOP里面的注解。

Spring AOP的基本概念
  1. 切面(Aspect):一个模块化的横切逻辑,可能会横切多个对象。
  2. 连接点(Join Point):程序执行中的某个具体的执行点。
  3. 增强处理(Advice):切面在某个特定连接点。
  4. 切入点(Pointcut)对连接点的特征进行描述。
  5. 目标对象(Target object):被一个或多个切面增强的对象。
  6. AOP代理(AOP proxy):由AOP框架所创建的对象,实现执行增强处理方法等功能。
  7. 织入(Weaving):将增强处理连接到应用程序中的类型或对象上的过程
  8. 增强处理类型:
    1. 前置增强
    2. 后置增强
    3. 最终增强
    4. 异常增强
    5. 循环增强
Spring AOP的增强类型
  1. 前置增强:在方法前面插入的增强处理为前置增强。

  2. 后置增强:在方法正常退出后面插入的增强处理为后置增强。

  3. 最终增强:在方法不管正常或异常退出都会插入的增强处理为最终增强。

  4. 异常增强:在方法异常退出后面插入的增强处理为前置增强。

  5. 循环增强:可以为方法提供前置增强、后置增强、异常增强、最终增强。它的方法是由循环增强执行的。

  6. 增强的配置代码:

        <!-- 增强方法的new对象 -->
    	<bean id="theLogger" class="aop.UserBizLogger"></bean>
        	<aop:config>
                 <!-- 匹配要增强的方法(* biz..*.*(..)) 表示biz下面使用的方法 -->
            	<aop:pointcut id="pointcut" expression="execution(* biz..*.*(..))"/>
            	<aop:aspect ref="theLogger">
     				<!-- 前置增强 method="方法名"-->
                	<aop:before method="before" pointcut-ref="pointcut"></aop:before>
                    
     				<!-- 后置增强  returning="放回值"-->
                	<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"></aop:after-returning>
                    
     				<!-- 异常增强  throwing="放回值"-->
                	<aop:after-throwing method="aftreThrowing" pointcut-ref="pointcut" throwing="e"></aop:after-throwing>
                    
     				<!-- 最终增强 returning="放回值"-->
                	<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"></aop:after-returning>
                    
            	</aop:aspect>
        	</aop:config>
  7. 编写增强类:

    1. 前置增强方法:可以显示入参

      	  public void before(JoinPoint jp){
              System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法入参:"+ Arrays.toString(jp.getArgs()));
          }
    2. 后置增强方法:可以返回一个Object的参数

      	public void afterReturning(JoinPoint jp , Object result){
              System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法返回值:"+result);
          }
    3. 异常增强方法:可以放回一个异常参数

      	public void aftreThrowing(JoinPoint jp , RuntimeException e){
              	System.out.println(jp.getSignature().getName()+"方法发生异常:"+e);
         	}
    4. 最终增强方法:没有返回值

      	public void afterLogger(JoinPoint jp){
              System.out.println(jp.getSignature().getName()+"方法结束执行 ");
          }
    5. 循环增强方法:

      必须由Object返回值,jp.proceed();是真正的调用方法

      	public Object aroudLogger(ProceedingJoinPoint jp) throws Throwable{
            	  System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法入参:"+ Arrays.toString(jp.getArgs()));
             	try {
                	 Object result = jp.proceed();
                	 System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法返回值:"+result);
               	  return result;
            	 }catch (Throwable e){
              	  System.out.println(jp.getSignature().getName()+"方法发生异常的:"+e);
              	   throw e;
          	   }finally {
                 	System.out.println(jp.getSignature().getName()+"方法结束执行");
          	   }
          }

Spring Mybatis 整合

导入jar架包

	<!-- mybatis-spring -->
	<dependency>
	  <groupId>org.mybatis</groupId>
 	 <artifactId>mybatis-spring</artifactId>
  	<version>2.0.1</version>
	</dependency>

	<!-- commons-dbcp2 -->
	<dependency>
	  <groupId>org.apache.commons</groupId>
	  <artifactId>commons-dbcp2</artifactId>
	  <version>2.7.0</version>
	</dependency>

	<!-- commons-pool2 -->
	<dependency>
	  <groupId>org.apache.commons</groupId>
 	 <artifactId>commons-pool2</artifactId>
 	 <version>2.7.0</version>
	</dependency>

	<!-- spring-jdbc -->
	<dependency>
	  <groupId>org.springframework</groupId>
	 <artifactId>spring-jdbc</artifactId>
	  <version>5.1.7.RELEASE</version>
	</dependency>

	<!--spring-tx -->
	<dependency>
 	 <groupId>org.springframework</groupId>
 	 <artifactId>spring-tx</artifactId>
  	<version>5.1.7.RELEASE</version>
	</dependency>

修改Spring xml文件

	<!-- 配置数据源-->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
   	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    	<property name="url">
        	<!-- 千万注意,这里不能换行 -->
       	 <value><![CDATA[jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8]]></value>
   	 </property>
	   	<property name="username" value="root" />
  	  <property name="password" value="root" />
	</bean>
	<!-- 引入mybatis的配置文件-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  	  <property name="dataSource" ref="dataSource"/>
  	  <property name="configLocation" value="classpath:mybatis-config.xml"/>
	</bean>

	<bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	    <property name="basePackage" value="com.mapper" />
	</bean>

	<bean id="userService" class="com.service.impl.UserServiceImpl">
 	   <property name="userMapper" ref="userMapper" />
	</bean>

	<bean class="com.controller.UserController" id="userController">
	    <property name="userService" ref="userService" />
	</bean>

spring注解

​ 以下代码可以通过注解定义一个名为orderBiz的Bean,@Component(“orderBiz”)的作用在xml配置文件中编写

		<bean id="orderBiz" class="biz.impl.orderBiz.impln>

	@Component("orderBiz")
	public class OrderBizImpl implements OrderBiz {
   		@Autowired
    	private OrderMapper orderMapper;
    	@Override
    	public List<Order> slelctList() {
    	    return orderMapper.slelctList();
   	 }
    }
  1. @Repository:用于标注dao类

  2. @Service:用于标注控制类

  3. @Controller:用于标注控制类。
    java

    @Component(“orderBiz”)
    public class OrderBizImpl implements OrderBiz {
    @Autowired
    private OrderMapper orderMapper;
    @Override
    public List slelctList() {
    return orderMapper.slelctList();
    }
    }

1. @Repository:用于标注dao类
2. @Service:用于标注控制类
3. @Controller:用于标注控制类。
4. @Component:通用注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值