00Spring

spring:
分层的Java SE/EE 应用full-stack轻量级开源框架
以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核

spring优势:
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架
降低JavaEE API的使用难度
Java源码是经典学习范例

耦合:
程序间的依赖关系(包括:类之间的依赖、方法间的依赖)

解耦:降低程序间的依赖关系

实际开发中应该做到:编译时不依赖,运行时才依赖

解耦思路:
第一步,使用反射来创建对象,而避免使用new关键字
第二步,通过读取配置文件来获取要创建的对象全限定类名


反射:
对象为什么需要照镜子呢?

    1. 有可能这个对象是别人传过来的

    2. 有可能没有对象,只有一个全类名 

  通过反射,可以得到这个类里面的信息

获取Class对象的三种方式
  1.通过类名获取      类名.class    

  2.通过对象获取      对象名.getClass()

  3.通过全类名获取    Class.forName(全类名)

01Spring Bean

core -> xmlns

Bean:在计算机英语中,有可重用组件的含义。
JavaBean:用java语言编写的可重用组件。
    JavaBean > 实体类
    它就是创建我们的service和dao对象的。

第一个:需要一个配置文件来配置我们的service和dao
    配置的内容:唯一标识=全限定类名(key=value)
第二个:通过读取配置文件中配置的内容,反射创建对象

配置文件:xml或properties


单例:从始至终只有一个对象实例化,只被创建一次,从而类中的成员也就只会初始化一次。
多例:对象被创建多次,执行效率没有单例对象高。


ApplicationContext的三个常用实现类:
    ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话,加载不了(更常用)
    FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)
    AnnotationConfigApplicationContext:它是用于读取注解创建容器的

核心容器的俩个接口引发出的问题:
ApplicationContext:    单例对象适用    一般采用此接口定义容器对象
    它在创建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
BeanFactory:    多例对象适用
    它在创建核心容器时,创建对象采取的策略是采用延时加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建就对象。


创建Bean的三种方式:
第一种方式:使用默认构造函数创建。
            在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
            采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>

第二种方式: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)

<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>

第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)

<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>

bean标签的scope属性:
            作用:用于指定bean的作用范围
            取值: 常用的就是单例的和多例的
                singleton:单例的(默认值)
                prototype:多例的
                request:作用于web应用的请求范围
                session:作用于web应用的会话范围
                global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>

bean对象的生命周期
            单例对象
                出生:当容器创建时对象出生
                活着:只要容器还在,对象一直活着
                死亡:容器销毁,对象消亡
                总结:单例对象的生命周期和容器相同
            多例对象
                出生:当我们使用对象时spring框架为我们创建
                活着:对象只要是在使用过程中就一直活着。
                死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收

02Spring依赖注入

spring中的依赖注入
        依赖注入:
            Dependency Injection
        IOC的作用:
            降低程序间的耦合(依赖关系)
        依赖关系的管理:
            以后都交给spring来维护
        在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明
        依赖关系的维护:
            就称之为依赖注入。
         依赖注入:
            能注入的数据:有三类
                基本类型和String
                其他bean类型(在配置文件中或者注解配置过的bean)
                复杂类型/集合类型
             注入的方式:有三种
                第一种:使用构造函数提供
                第二种:使用set方法提供
                第三种:使用注解提供

如果是经常变化的数据,并不适用于注入的方式

构造函数注入:
        使用的标签:constructor-arg
        标签出现的位置:bean标签的内部
        标签中的属性
            type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
            index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
            name:用于指定给构造函数中指定名称的参数赋值                                        常用的
=============以上三个用于指定给构造函数中哪个参数赋值====================
            value:用于提供基本类型和String类型的数据
            ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象

        优势:
            在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
        弊端:
            改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供。

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"><constructor-arg name="name" value="泰斯特"></constructor-arg><constructor-arg name="age" value="18"></constructor-arg><constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<!-- 配置一个日期对象 -->
<bean id="now" class="java.util.Date"></bean>

set方法注入                更常用的方式
        涉及的标签:property
        出现的位置:bean标签的内部
        标签的属性
            name:用于指定注入时所调用的set方法名称
            value:用于提供基本类型和String类型的数据
            ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
        优势:
            创建对象时没有明确的限制,可以直接使用默认构造函数
        弊端:
            如果有某个成员必须有值,则获取对象是有可能set方法没有执行。

<bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2"><property name="name" value="TEST" ></property><property name="age" value="21"></property><property name="birthday" ref="now"></property>
</bean>

复杂类型的注入/集合类型的注入
        用于给List结构集合注入的标签:
            list array set
        用于个Map结构集合注入的标签:
            map  props
        结构相同,标签可以互换

03Spring注解IOC

曾经XML的配置:

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"scope=""  init-method="" destroy-method=""><property name=""  value="" | ref=""></property>
</bean>

 用于创建对象的
       他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的
       @Component:
           作用:用于把当前类对象存入spring容器中
           属性:
              value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
       Controller:一般用在表现层
       Service:一般用在业务层
       Repository:一般用在持久层
      以上三个注解他们的作用和属性与Component是一模一样。
      他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

 
   用于注入数据的
      他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的
        Autowired:
           作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
                 如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
                 如果Ioc容器中有多个类型匹配时:
           出现位置:
               可以是变量上,也可以是方法上
           细节:
               在使用注解注入时,set方法就不是必须的了。
       Qualifier:
           作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以
           属性:
               value:用于指定注入bean的id。
       Resource
           作用:直接按照bean的id注入。它可以独立使用
           属性:
               name:用于指定bean的id。
       以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
       另外,集合类型的注入只能通过XML来实现。
 
       Value
           作用:用于注入基本类型和String类型的数据
           属性:
               value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)
                       SpEL的写法:${表达式}
 
  用于改变作用范围的
       他们的作用就和在bean标签中使用scope属性实现的功能是一样的
       Scope
           作用:用于指定bean的作用范围
           属性:
               value:指定范围的取值。常用取值:singleton prototype
 
  和生命周期相关 了解
       他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
       PreDestroy
           作用:用于指定销毁方法
       PostConstruct
           作用:用于指定初始化方法

@Service("accountService")
//@Scope("prototype")
public class AccountServiceImpl implements IAccountService {//    @Autowired
//    @Qualifier("accountDao1")@Resource(name = "accountDao2")private IAccountDao accountDao = null;

04Spring注解配置

core -> xmlns:context

spring中的新注解:
Configuration
      作用:指定当前类是一个配置类
      细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。
  ComponentScan
       作用:用于通过注解指定spring在创建容器时要扫描的包
       属性:
           value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。
                  我们使用此注解就等同于在xml中配置了: 

<context:component-scan base-package="com.itheima"></context:component-scan>

Bean
       作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中
       属性:
           name:用于指定bean的id。当不写时,默认值是当前方法的名称
       细节:
           当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。
           查找的方式和Autowired注解的作用是一样的
   Import
       作用:用于导入其他的配置类
       属性:
           value:用于指定其他配置类的字节码。
                   当我们使用Import的注解之后,有Import注解的类就父配置类,而导入的都是子配置类
   PropertySource
       作用:用于指定properties文件的位置
       属性:
           value:指定文件的名称和路径。
                   关键字:classpath,表示类路径下

05Spring整合JUnit配置

Spring整合junit的配置
       1、导入spring整合junit的jar(坐标)
       2、使用Junit提供的一个注解把原有的main方法替换了,替换成spring提供的
              @Runwith
       3、告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
           @ContextConfiguration
                   locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
                   classes:指定注解类所在地位置
 
    当我们使用spring 5.x版本的时候,要求junit的jar必须是4.12及以上
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)

@ContextConfiguration(locations = "classpath:bean.xml")

06Spring_ConnectionUtils

需要使用ThreadLocal对象把Connection和当前线程绑定,
    从而使一个线程中只有一个能控制事务的对象。

ConnectionUtils:连接的工具类,它用于从数据源中获取一个连接,并且实现和线程的绑定

TransactionManager:和事务管理相关的工具类,它包含了,
    开启事务:connectionUtils.getThreadConnection().setAutoCommit(false)
    提交事务:commit()
    回滚事务:rollback()
    释放连接:close()

07动态代理

动态代理:
           特点:字节码随用随创建,随用随加载
           作用:不修改源码的基础上对方法增强
           分类:
               基于接口的动态代理
               基于子类的动态代理
           基于接口的动态代理:
               涉及的类:Proxy
               提供者:JDK官方
           如何创建代理对象:
               使用Proxy类中的newProxyInstance方法
           创建代理对象的要求:
               被代理类最少实现一个接口,如果没有则不能使用
           newProxyInstance方法的参数:
               ClassLoader:类加载器
                   它是用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法。
               Class[]:字节码数组
                   它是用于让代理对象和被代理对象有相同方法。固定写法。
               InvocationHandler:用于提供增强的代码
                   它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下都是匿名内部类,但不是必须的。
                   此接口的实现类都是谁用谁写。

IProducer proxyProducer = (IProducer) Proxy.newProxyInstance(producer.getClass().getClassLoader(),producer.getClass().getInterfaces(),new InvocationHandler() {/*** 作用:执行被代理对象的任何接口方法都会经过该方法* 方法参数的含义* @param proxy   代理对象的引用* @param method  当前执行的方法* @param args    当前执行方法所需的参数* @return        和被代理对象方法有相同的返回值* @throws Throwable*/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//提供增强的代码Object returnValue = null;//1.获取方法执行的参数Float money = (Float)args[0];//2.判断当前方法是不是销售if("saleProduct".equals(method.getName())) {returnValue = method.invoke(producer, money*0.8f);}return returnValue;}});

动态代理:
           特点:字节码随用随创建,随用随加载
           作用:不修改源码的基础上对方法增强
           分类:
               基于接口的动态代理
               基于子类的动态代理
           基于子类的动态代理:
               涉及的类:Enhancer
               提供者:第三方cglib库
           如何创建代理对象:
               使用Enhancer类中的create方法
           创建代理对象的要求:
               被代理类不能是最终类
           create方法的参数:
               Class:字节码
                   它是用于指定被代理对象的字节码。
         
               Callback:用于提供增强的代码
                   它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下都是匿名内部类,但不是必须的。
                   此接口的实现类都是谁用谁写。
                   我们一般写的都是该接口的子接口实现类:MethodInterceptor

Producer cglibProducer = (Producer)Enhancer.create(producer.getClass(), new MethodInterceptor() {/*** 执行被代理对象的任何方法都会经过该方法* @param proxy* @param method* @param args*    以上三个参数和基于接口的动态代理中invoke方法的参数是一样的* @param methodProxy :当前执行方法的代理对象* @return* @throws Throwable*/@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//提供增强的代码Object returnValue = null;//1.获取方法执行的参数Float money = (Float)args[0];//2.判断当前方法是不是销售if("saleProduct".equals(method.getName())) {returnValue = method.invoke(producer, money*0.8f);}return returnValue;}});

08Spring_AOP

AOP:(Aspect Oriented Programming) 面向切面编程,是OOP(面向对象编程)的延续
    作用:在程序运行期间,不修改源码对已有方法进行增强
    优势:减少重复代码,提高开发效率,维护方便
    实现方式:使用动态代理技术

AOP相关术语:
Joinpoint(连接点):指被拦截到的点,在Spring中,这些点指的是方法,
        因为Spring只支持方法类型的连接点(业务层中方法)
Pointout(切入点):指我们要对哪些Joinpoint进行拦截的定义(被增强的方法)

Advice(通知/增强):通知指拦截到Jointpoint之后要做的事情
        通知类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
Introduction(引介):是一种特殊的通知,在不修改类代码的前提下,
        Introduction可以在运行期为类动态地添加一些方法或Field
Target(目标对象):代理的目标对象
Weaving(织入):指把增强应用到目标对象来创建新的代理对象的过程
        spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类。
Aspect(切面):是切入点和通知(引介)的结合。

09Spring_AOP_XML配置

spring中基于XML的AOP配置步骤
        1、把通知Bean也交给spring来管理
        2、使用aop:config标签表明开始AOP的配置
        3、使用aop:aspect标签表明配置切面
                id属性:是给切面提供一个唯一标识
                ref属性:是指定通知类bean的Id。
        4、在aop:aspect标签的内部使用对应标签来配置通知的类型
               我们现在示例是让printLog方法在切入点方法执行之前之前:所以是前置通知
               aop:before:表示配置前置通知
                    method属性:用于指定Logger类中哪个方法是前置通知
                    pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强

            切入点表达式的写法:
                关键字:execution(表达式)
                表达式:
                    访问修饰符  返回值  包名.包名.包名...类名.方法名(参数列表)
                标准的表达式写法:
                    public void com.itheima.service.impl.AccountServiceImpl.saveAccount()
                访问修饰符可以省略
                    void com.itheima.service.impl.AccountServiceImpl.saveAccount()
                返回值可以使用通配符,表示任意返回值
                    * com.itheima.service.impl.AccountServiceImpl.saveAccount()
                包名可以使用通配符,表示任意包。但是有几级包,就需要写几个*.
                    * *.*.*.*.AccountServiceImpl.saveAccount())
                包名可以使用..表示当前包及其子包
                    * *..AccountServiceImpl.saveAccount()
                类名和方法名都可以使用*来实现通配
                    * *..*.*()
                参数列表:
                    可以直接写数据类型:
                        基本类型直接写名称           int
                        引用类型写包名.类名的方式   java.lang.String
                    可以使用通配符表示任意类型,但是必须有参数
                    可以使用..表示有无参数均可,有参数可以是任意类型
                全通配写法:
                    * *..*.*(..)

                实际开发中切入点表达式的通常写法:
                    切到业务层实现类下的所有方法
                        * com.itheima.service.impl.*.*(..)

    <!-- 配置Logger类 --><bean id="logger" class="com.itheima.utils.Logger"></bean>

   

<!--配置AOP--><aop:config><!-- 配置切入点表达式 id属性用于指定表达式的唯一标识。expression属性用于指定表达式内容此标签写在aop:aspect标签内部只能当前切面使用。它还可以写在aop:aspect外面,此时就变成了所有切面可用--><aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"><!-- 配置前置通知:在切入点方法执行之前执行<aop:before method="beforePrintLog" pointcut-ref="pt1" ></aop:before>--><!-- 配置后置通知:在切入点方法正常执行之后值。它和异常通知永远只能执行一个<aop:after-returning method="afterReturningPrintLog" pointcut-ref="pt1"></aop:after-returning>--><!-- 配置异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个<aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt1"></aop:after-throwing>--><!-- 配置最终通知:无论切入点方法是否正常执行它都会在其后面执行<aop:after method="afterPrintLog" pointcut-ref="pt1"></aop:after>--><!-- 配置环绕通知--><aop:around method="aroundPringLog" pointcut-ref="pt1"></aop:around></aop:aspect></aop:config>

pom.xml:   

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency>
</dependencies>

环绕通知
      问题:
           当我们配置了环绕通知之后,切入点方法没有执行,而通知方法执行了。
      分析:
           通过对比动态代理中的环绕通知代码,发现动态代理的环绕通知有明确的切入点方法调用,而我们的代码中没有。
      解决:
           Spring框架为我们提供了一个接口:ProceedingJoinPoint。该接口有一个方法proceed(),此方法就相当于明确调用切入点方法。
           该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供该接口的实现类供我们使用。
     
      spring中的环绕通知:
           它是spring框架为我们提供的一种可以在代码中手动控制增强方法何时执行的方式。

public Object aroundPringLog(ProceedingJoinPoint pjp){Object rtValue = null;try{Object[] args = pjp.getArgs();//得到方法执行所需的参数System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");return rtValue;}catch (Throwable t){System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");throw new RuntimeException(t);}finally {System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");}
}

10Spring_AOP_注解配置

@Component("logger")
@Aspect//表示当前类是一个切面类
public class Logger {@Pointcut("execution(* com.itheima.service.impl.*.*(..))")private void pt1(){}/*** 前置通知*/
//    @Before("pt1()")public  void beforePrintLog(){System.out.println("前置通知Logger类中的beforePrintLog方法开始记录日志了。。。");}/*** 后置通知*/
//    @AfterReturning("pt1()")public  void afterReturningPrintLog(){System.out.println("后置通知Logger类中的afterReturningPrintLog方法开始记录日志了。。。");}/*** 异常通知*/
//    @AfterThrowing("pt1()")public  void afterThrowingPrintLog(){System.out.println("异常通知Logger类中的afterThrowingPrintLog方法开始记录日志了。。。");}/*** 最终通知*/
//    @After("pt1()")public  void afterPrintLog(){System.out.println("最终通知Logger类中的afterPrintLog方法开始记录日志了。。。");}@Around("pt1()")public Object aroundPringLog(ProceedingJoinPoint pjp){Object rtValue = null;try{Object[] args = pjp.getArgs();//得到方法执行所需的参数System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");return rtValue;}catch (Throwable t){System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");throw new RuntimeException(t);}finally {System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");}}
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置spring创建容器时要扫描的包--><context:component-scan base-package="com.itheima"></context:component-scan><!-- 配置spring开启注解AOP的支持 --><aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

不使用XML的配置方式:

@Configuration
@ComponentScan(basePackages="com.itheima")
@EnableAspectJAutoProxy
public class SpringConfiguration{
}

11Spring_JdbcTemplate

spring中的JdbcTemplate
    JdbcTemplate的作用:
        它就是用于和数据库交互的,实现对表的CRUD操作
    如何创建该对象:
    对象中的常用方法:pom.xml:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency>
</dependencies>

定义Account的封装策略

class AccountRowMapper implements RowMapper<Account>{/*** 把结果集中的数据封装到Account中,然后由spring把每个Account加到集合中* @param rs* @param rowNum* @return* @throws SQLException*/@Overridepublic Account mapRow(ResultSet rs, int rowNum) throws SQLException {Account account = new Account();account.setId(rs.getInt("id"));account.setName(rs.getString("name"));account.setMoney(rs.getFloat("money"));return account;}
}

12Spring事务控制API介绍

PlatformTransactionManager:
3个具体操作:
获取事务状态信息:TransactionStatus getTransaction(TransactionDefinition definition)
提交事务:void commid(TransactionStatus status)
回滚事务:void rollback(TransactionStatus status)
实现类:DataSourceTransactionManager(SpringJDBC或IBatis进行持久化数据时使用)
             HibernateTransactionManager(使用Hibernate版本进行持久化数据时使用)

TransactionDefinition:
获取事务对象名称:String getName()
获取事务隔离级: int getIsolationLevel()
获取事务传播行为:int getPropagationBehavior()  (增删改)
获取事务超时时间: int getTimeout()
获取事务是否只读:boolean isReadOnly()    (查)

13Spring_XML事务控制

Data Access -> xmlns:txpom.xml:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>

bean.xml:

<!-- spring中基于XML的声明式事务控制配置步骤1、配置事务管理器2、配置事务的通知此时我们需要导入事务的约束 tx名称空间和约束,同时也需要aop的使用tx:advice标签配置事务通知属性:id:给事务通知起一个唯一标识transaction-manager:给事务通知提供一个事务管理器引用3、配置AOP中的通用切入点表达式4、建立事务通知和切入点表达式的对应关系5、配置事务的属性是在事务的通知tx:advice标签的内部--><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 配置事务的通知--><tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 配置事务的属性isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写。timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。没有默认值。表示任何异常都回滚。--><tx:attributes><tx:method name="*" propagation="REQUIRED" read-only="false"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method></tx:attributes></tx:advice><!-- 配置aop--><aop:config><!-- 配置切入点表达式--><aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut><!--建立切入点表达式和事务通知的对应关系 --><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor></aop:config>

14Spring_注解事务控制

bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置spring创建容器时要扫描的包--><context:component-scan base-package="com.itheima"></context:component-scan><!-- 配置JdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- 配置数据源--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/eesy"></property><property name="username" value="root"></property><property name="password" value="1234"></property></bean><!-- spring中基于注解 的声明式事务控制配置步骤1、配置事务管理器2、开启spring对注解事务的支持3、在需要事务支持的地方使用@Transactional注解--><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 开启spring对注解事务的支持--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven></beans>

@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)//只读型事务的配置
@Transactional(propagation= Propagation.REQUIRED,readOnly=false) //读写型事务配置
 

15Spring_全注解事务控制

SpringConfiguration.class:

/*** spring的配置类,相当于bean.xml*/
@Configuration
@ComponentScan("com.itheima")
@Import({JdbcConfig.class,TransactionConfig.class})
@PropertySource("jdbcConfig.properties")
@EnableTransactionManagement
public class SpringConfiguration {
}


JdbcConfig.class:

/*** 和连接数据库相关的配置类*/
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;/*** 创建JdbcTemplate* @param dataSource* @return*/@Bean(name="jdbcTemplate")public JdbcTemplate createJdbcTemplate(DataSource dataSource){return new JdbcTemplate(dataSource);}/*** 创建数据源对象* @return*/@Bean(name="dataSource")public DataSource createDataSource(){DriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);return ds;}
}TransactionConfig.class:
/*** 和事务相关的配置类*/
public class TransactionConfig {/*** 用于创建事务管理器对象* @param dataSource* @return*/@Bean(name="transactionManager")public PlatformTransactionManager createTransactionManager(DataSource dataSource){return new DataSourceTransactionManager(dataSource);}
}


 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 对vue2.0的v-for和v-if冲突问题一些见解

    之前看过有一种关于v-for和v-if之所以产生冲突的解释&#xff0c;我觉得是比较合理的说法&#xff0c;这里记录一下。vue2里&#xff0c;同一个标签内v-for的执行优先级比v-if高&#xff0c;也就是说先执行循环渲染生成了这些dom元素&#xff0c;然后此时再去执行v-if的判断条件…...

    2024/4/7 22:19:25
  2. 项目延期的一些原因

    概述 没有特殊原因&#xff0c;项目延期&#xff0c;这个字眼是不能随便说的&#xff0c;如果项目才开始不久或者还有一半的时间&#xff0c;就开始提延期&#xff0c;是不负责任的行为。因为还有很多努力的空间呢&#xff0c;如何解决如何应对才是你该想的事情。如果有些风险&…...

    2024/5/10 17:06:44
  3. xjoi9222

    https://xjoi.net/problem/9222 时间&#xff1a;0.2 空间&#xff1a;32M 题目描述&#xff1a; 小明特别喜欢收集卡牌&#xff0c;每天放学都要买各种零食就为了收集卡牌。但是随着卡牌的增多&#xff0c;小明开始苦恼&#xff0c;他总是忘记某些卡牌的攻击力。他觉得每次…...

    2024/5/10 17:30:11
  4. 负载均衡--ribbon

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说就是将用户的请求平摊的分配到多个服务上&#xff0c;从而达到系统的HA(高可用&#xff09;。常用的负载均衡软件 Nginx 重写负载均衡算法看IRule接口 1.导入依赖 <dependency><g…...

    2024/5/10 12:45:18
  5. SpringBoot全局异常处理

    在SpringBoot默认的异常处理是返回一个HTML页面&#xff0c;但是在前后端分离的开发模式下&#xff0c;服务器出现异常应该以json格式返回数据给前端。 ControllerAdvice public class GlobalExceptionAdvice {ExceptionHandler(Exception.class)ResponseBodypublic Object ex…...

    2024/4/24 14:23:44
  6. three.js实现管道流光

    // 创建管道 如果想让管道 转折处附近多设几个点curve new THREE.CatmullRomCurve3([new THREE.Vector3(0, 200, 0),new THREE.Vector3(0, 200, -500),new THREE.Vector3(10, 200, -500),new THREE.Vector3(20, 200, -500),new THREE.Vector3(800, 200, -500)])tubeGeometry …...

    2024/5/10 6:23:03
  7. 无聊的冷知识,arraylist,中 remove(Object obj),和 remove(int index) 重载问题

    代码如下 public static void main(String[] args) {ArrayList<Integer> ls new ArrayList<>();ls.add(1);ls.add(2);ls.add(3);int num 2; //indexInteger num1 1; // objectls.remove(num1);System.out.println( ls.toString() );}在ArrayList中有两个 remov…...

    2024/5/10 12:48:47
  8. Mybatis相应API

    Mybatis相应API 1、SqlSession工厂构造器SqlSessionFactoryBuilder 2、SqlSession工厂对象sqlSessionFactory 3、SqlSession会话对象 <!--查询一个数据--><select id"findBy" resultType"user" parameterType"int">select * f…...

    2024/5/10 16:52:44
  9. Allegro修改via net

    ...

    2024/5/10 5:07:29
  10. VTK应用程序连接出现vtkRenderingOpenGL_AutoInit_Construct(void)报错解决方法一则

    出现vtkRenderingOpenGL_AutoInit_Construct(void)报错&#xff1a; &#xff08;1&#xff09;具体报错为&#xff1a; error LNK2019: 无法解析的外部符号"void __cdecl vtkRenderingOpenGL_AutoInit_Construct(void)"(?vtkRenderingOpenGL_AutoInit_ConstructYA…...

    2024/5/10 12:10:22
  11. GBase 8c 数据类型——4-二进制数据类型

    bytea类型允许存储二进制串&#xff0c;如下&#xff1a; butes转义是将无法用ASCII字符表示的字节转换成特殊语义的语句。 如下表&#xff0c;表内为必须被转义的字符&#xff1a; 同时butes转义也会发生在输出时&#xff0c;如下为输出转义字节表&#xff1a;...

    2024/5/10 6:36:41
  12. C语言的数组总结

    文章目录一、一维数组1、一维数组的定义2. 一维数组的引用3. 一维数组初始化二、二维数组1. 二维数组的定义2. 二维数组的引用3.二维数组初始化三、字符数组1. 字符数组的定义2. 字符数组的引用3.字符数组初始化4、字符数组的结束标志5、字符数组的输入和输出一、一维数组 1、…...

    2024/4/22 12:50:02
  13. Microsoft微软官方Win10 visual c++(vc++2019)运行库下载

    最新支持Visual C 可再发行程序包下载 | Microsoft Docs本文列出了最新版本的包的下载Visual C 可再发行程序包链接。https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads Windows10 C/C运行库Visual Studio 2015、2017 和 2019下载地…...

    2024/4/16 0:24:47
  14. div 设置滚动条大小(粗细)

    <div class"nav" style"overflow:auto; overflow-x:hidden; "></div> 上面我设置隐藏水平滚动条&#xff0c;当内容超过高度时垂直滚动条会自动显示出来。 下面是滚动条的样式&#xff0c;可以设置宽度和颜色。 <style scoped lang"…...

    2024/4/19 23:13:40
  15. SAP UI5 应用开发教程之三十五 - 如何把本地开发的 SAP UI5 应用部署到 ABAP 服务器上

    本教程前 34 个步骤, SAP UI5 应用一直是在本地 Visual Studio Code 中开发并通过本地命令行 ui5 serve 启动然后本地测试的。 本步骤我们将学习,如何使用 SAP UI5 Tools 的命令行,一键将这个本地开发好的 SAP UI5 应用,部署到 ABAP On-Premises 服务器上运行。 要按照本…...

    2024/4/13 11:08:46
  16. vue3+vite2+element plus

    即时编译&#xff0c;按需编译。 新建项目 npm create vitejs/app npm install element-plus --saveimport Userlist from "./views/userlist.vue"; const tableData reactive([]);onMounted(() > {loadDate(tableData); }); const loadDate (data) > {data…...

    2024/4/7 22:19:13
  17. 剑指 Offer 63. 股票的最大利润

    题目描述&#xff1a; 假设把某股票的价格按照时间先后顺序存储在数组中&#xff0c;请问买卖该股票一次可能获得的最大利润是多少&#xff1f; 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天&#xff08;股票价格 1&#xff09;的时候买入&#xff0c;在第 5 天&…...

    2024/4/18 21:43:33
  18. 移除联想M5210阵列卡(3650M5)的缓存模块以开启JBOD模式

    由于只有不配备缓存阵列卡才支持JBOD / 硬盘直通模式功能&#xff0c;如需在配有缓存模块的ServerRAID M5210阵列卡上使用JBOD模式&#xff0c;必须手动拆除缓存模块。 本例是在配有ServerRAID M5210的System x3550 M5服务器上实施拆除缓存模块的操作&#xff0c;其他机型也可以…...

    2024/4/17 5:11:18
  19. 小小城邦 隐私权政策 20220208更新

    1、本游戏功能完全单机&#xff0c;不连接网络&#xff0c;不收集任何信息 2、本游戏内置Unity Ads广告可能使用网络&#xff0c;会在用户许可的前提下有选择的提供广告&#xff0c;详情参见官方文档&#xff1a; Privacy consent and data APIs...

    2024/4/7 22:19:11
  20. 最快速升级R语言程序

    R语言是为数学研究工作者设计的一种数学编程语言&#xff0c;主要用于统计分析、绘图、数据挖掘。 跟所有计算机语言一样&#xff0c;R语言也面临升级的问题。 本文讲述了最快捷的升级R语言办法&#xff0c;不用重新安装之前的安装包。 首先&#xff0c;进入R交互模式&#…...

    2024/4/13 11:08:36

最新文章

  1. 视频号小店保证金,服务费,手续费是多少?货款结算周期多长?

    大家好&#xff0c;我是电商糖果 随着视频号小店越来越火&#xff0c;很多商家都想入驻小店。 入驻之前大家对视频号的收费问题都比较好奇。 糖果2022年就开始做店的了&#xff0c;对小店的保证金&#xff0c;服务费的&#xff0c;手续费&#xff0c;货款结算周期都非常了解…...

    2024/5/10 17:32:56
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. 数据结构--KMP算法

    数据结构–KMP算法 首先我在这里提出以下问题&#xff0c;一会一起进行探讨 1.什么是最长公共前后缀 2. KMP算法怎么实现对匹配原理 3. 最长公共前后缀怎么求解 KMP算法可以用来解决什么问题&#xff1f; 答&#xff1a;在字符串中匹配子串&#xff0c;也称为模式匹配 分析…...

    2024/5/9 18:04:06
  4. 通过mapreduce程序统计旅游订单(wordcount升级版)

    通过mapreduce程序统计旅游订单&#xff08;wordcount升级版&#xff09; 本文将结合一个实际的MapReduce程序案例&#xff0c;探讨如何通过分析旅游产品的预订数据来揭示消费者的偏好。 程序概览 首先&#xff0c;让我们来看一下这个MapReduce程序的核心代码。这个程序的目…...

    2024/5/9 4:30:23
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/10 12:36:12
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/9 15:10:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/10 10:22:18
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/9 17:11:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57