spring学习

spring

注意:
部分代码存在乱码问题,直接复制会出现错误!
大二小白一枚,初学java,有任何问题和建议欢迎指教

Spring利用配置文件代替new(IOC):

XML: class内放类路径

java:

ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml"); //此处放配置文件路径
User user=context.getBean("user",User.class);

xml文件放入resource文件里!

IOC接口:

IOC思想基础IOC容器完成,IOC容器底层就是对象工厂

Spring提供IOC容器的俩种实现方式:(俩个接口) 都可以通过配置文件获取对象

1.BeanFactory:

​ IOC容器基本实现,是Spring内部使用的接口,不提供开发人员使用

​ *加载配置文件的时候不会创建对象,在获取(使用)对象的时候才会创建。

2.ApplicationContext:

​ BeanFactory的子接口,提供更多强大的功能,一般由开发人员使用

*加载配置文件时就会创建

IOC操作Bean管理:

1.创建对象

2.注入属性(给变量赋初值)

1.基于XML配置文件
创建对象
  1. 在spring配置文件中,使用bean标签,标签里加对应属性

  2. Bean中的标签:(1)id属性:唯一标识 (2)class:类的全路径(包类路径) (3)name:(等同于id)(可以加特殊符号)

  3. 创建对象时,默认执行无参构造

    注入属性

    1.DI:依赖注入

                        ~set方法注入属性:(java)中有set方法
    <bean id="名字" class="路径">
        <!--使用property完成属性注入-->
        <property name="属性名称" value="对象值"></property>
        
        <!--设置空值-->
         <property name="属性名称" >
             <null/>
        </property>
        
           <!--属性值有特殊符号-->
        <property name="属性名称" >
             <value>
            	<![CDATA[内容]]>
            </value>
        </property>
    </bean>
    
                          ~有参构造:(java)中有有参构造方法
    <bean id="名字" class="路径">
       <constructor-arg name="属性名称"  value="对象值"></constructor-arg>
        (name可以用index=“数字”代替,.ex:0为第一个参数,1为第二个参数)
    </bean>
    {多个对象多次使用对应标签}               
    

    ​ ~ p名称空间注入(set注入简化版)

2.内外部bean(一个类中调用另一个类的方法)(类1调用类2)
在这里插入图片描述

外部:
<bean id="类1" class="类1路径">
	<property name="属性名称" ref="类2id"></property>
</bean>
<bean id="类2" class="类2路径"></bean>
内部:
<bean id="类1" class="类1路径">
	<property name="属性名称" >
    	<bean id="类2" class="类2路径"></bean>
    </property>
</bean>

3.注入集合属性(数组,链表)

<bean id="类名" class="类路径">
	<property name="数组名称" >
    	<array>//也可以为<list>  
        	<value>第一个值</value>
            <value>第二个值</value>
        </array>
    </property>
        
    <property name="map名称">
     	<map>
        	<entry  key=""  value=""></entry>
           	<entry  key=""  value=""></entry>
        </map>   
    </property>
        
     注入list集合,值是对象
      <property name="list名称">
        <list>
           <ref bean="对象id值"></ref>
          </list>
        </property>
</bean>
    

(将属性注入变为公共)(一个数组多个类使用)

IOC操作Bean管理(FactoryBean)

1.普通bean:在配置文件中定义bean的类型就是返回的类型

2.工厂bean:在配置文件中定义的bean类型可以和返回值不同

​ 操作步骤:1.创建类,让这个类作为工厂bean,实现FactoryBean接口

​ 2.实现方法,在实现的方法中定义返回的bean类型

设置单实例或多实例:bean标签里的scope属性:1.默认值,singleton(单实例) 2.prototype (多实例)

初始化方法:bean中的init-method标签,值为初始化方法名称

销毁方法:bean中的destory-method标签,值为销毁方法名称,手动调用close方法

属性自动注入:(之前为手动)bean中的autowire标签,其中byName表示根据属性名称注入(属性名跟id相同),byTpye表示根据 类型(属性类型);(一般用于类与类)
外部属性文件:

1.直接配置数据库信息:

​ (1)加入jar包

​ (2)在这里插入图片描述

2.外部属性文件配置数据库连接池:

(1)创建外部属性文件,properties格式文件,写数据库信息

(2)把外部properties文件引入spring配置文件中 :*引入context名称空间 在这里插入图片描述

​ *使用标签引入在这里插入图片描述

2.基于注解方式

注解格式:@注解名称(属性名称=属性值,属性名称=属性值…)

注解可以作用在类,方法,属性上面

spring中创建对象的注解

(1)@Component:普通组件

(2)@Service:用于业务逻辑层(service层)

(3)@Contorller:用于web层

(4)@Repository:用于Dao层和数据持久层

作用都相同!!!!!

spring中运用注解创建对象:

1.引入依赖:Spring-aop-RELEASE.jar

2.开启组件扫描(制定扫描位置):

​ (1)引入context命名空间(见上)

​ (2)

<context:component-scan base-package="包名称,包名称"> </context:component-scan>
多个包可以用逗号隔开

use-default-filters="false"表示不使用默认filter,自己配置filter
context:include-filter 设置需要扫描的内容,
context:exclude-filter 设置不需要扫描的内容
此处表示只扫描带Controller注解的类
<context:component-scan base-package="包名称,包名称" use-default-filters="false">
	<context:include-filter type="annotation" expression="org.springframework.stereotype.Controlle"/>
</context:component-scan>

3.创建类,并在类上添加创建对象注解

4.后续手段如开头java代码

spring中运用注入属性的注解(不需要set方法)

(1)@AutoWired:根据属性类型进行注入

(2)@Qualifier:根据属性名称进行注入,跟(1)一起进行使用,(value=“名称(在类注解中使用value添加的名称)”)

(3)@Resource:俩者皆可 加(name=“”)即为俩者皆可,不加则根据类型注入

(4)@Value:注入普通类型属性 (value=“”)

完全注解开发(不需要配置文件进行配置扫描)

1.创建配置类(代替配置文件)加注解@Configuration–配置类,@ComponentScan(basepacks={“包名 ”})–组件扫描

2.在java中为:

ApplicationContext context=new AnnotationConfigApplicationContext(配置类.class);
User user=context.getBean(“user”,User.class);

AOP

spring框架一般基于AspectJ实现AOP操作

(1)基于xml配置文件

(2)注解

引入aop.jar跟AspectJ.jar依赖

切入点表达式:Execution([权限修饰符(public等)] [返回类型] [类全路径] [方法名称] ([参数列表]))

例如:1.对Dao包中的UserDao中的add方法增强:execution(* Dao.UserDao.add(…))

​ 2.对Dao包中的UserDao中的所有方法增强:execution(* Dao.UserDao.*(…))

​ 2.对Dao包中的所有类中的所有方法增强:execution(* Dao.* .*(…))

术语:

1.连接点:类里面哪些方法可以被增强,这些方法被称为连接点

2.切入点:实际被真正增强的方法,称为切入点

3.通知(增强):实际增强的逻辑部分称为通知(增强)

4.切面:把通知应用的切入点的过程

AspectJ注解

1.创建类,定义方法

2.创建增强类(编写增强逻辑 )

​ (1)在增强类里创建方法,让不同方法代表不同通知

3.进行通知配置

​ (1)在spring配置文件中开始注解扫描

​ (2)使用注解创建俩个类对象

​ (3)在增强类上加注解@aspect

​ (4)在spring配置文件中开启生成代理对象:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

4.配置不同类型的通知:@Before @AfterReturning @AfterThrowing @Around

5.相同切入点抽取:创建一个方法加入@Pointcut(Value=切入点表达式),其他类型上的注解直接value=“切入点表达式方法”

6.多个增强类对一个方法进行增强设置优先级:在增强类的上面添加@Order(数字)注解,(数字越小优先级越高)

AspectJ配置文件

1.创建增强类和被增强类,创建方法

2.在spring配置文件中创建俩个类对象

3.在spring文件中配置切入点

<aop:config>
    切入点
	<aop:pointcut id="切入点名字" expression="切入点表达式(execution)"/>
    切面
    <aop:asept ref="增强类名">
    	增强作用在具体方法上
        <aop:before method="增强方法名" pointcut-ref="作用到的方法id(切入点id)"/>
    </aop:asept>
</aop:config>
完全注解开发(不需要配置文件进行配置扫描)

1.创建配置类(代替配置文件)加注解@Configuration–配置类,@ComponentScan(basepacks={“包名 ”})–开启扫描

​ @EableAspectJAutoProxy(PpoxyTargetClass = true)–开启生成代理对象

2.在java中为:

ApplicationContext context=new AnnotationConfigApplicationContext(配置类.class);
User user=context.getBean(“user”,User.class);

JdbcTemplate

配置:

配置连接池....

<bean id="名字" class="org.springframework.jdbc.core.JdbcTemple">
	<property name="dataSource" ref="连接池id"
</bean>

事务操作

在java中使用数据库操作时,为了防止异常导致数据错误…

编程式事务管理:

在这里插入图片描述

声明式事务管理:
1.注解方式:

(1)在spring文件中配置事务管理器

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"></property>
    </bean>

(2)在spring文件中开启事务注解(引入tx空间)

<tx:annotation-driven transaction-manager="transactionmanager></tx:annotation-driven>"

(3)在service类中(获取servicel类方法上面)添加事务注解:@Transactional

2.参数配置

在@Transactional()中配置相关参数

1:prapagation:事务传播行为:多事务方法(对数据库数据进行变化的操作)直接进行调用,这个过程中事务是如何进行管理的

在这里插入图片描述

2:ioslation:事务隔离级别:隔离性:多事务操作之间不会产生影响

在这里插入图片描述

3.:timeout:超时时间:事务在一定时间内提交,超时则回滚。默认-1(永不超时)

4.:readOnly:是否可读

5.:rollbackFor:回滚:设置查询哪些异常会进行事务回滚

6.:noRollbackFo:不回滚

完全注解方式:

创建配置类注解加:@Configuration–配置类,@ComponentScan(basepacks={“包名 ”})–开启扫描

​ @EableTransactionManagement --开始事务

xml方式声明式事务管理

1.配置事务管理器:见注解式中

2.配置通知:

<tx:advice id="txadvice">
	<tx:attributes>
        指定在哪种规则的方法上面添加事务
    	<tx:method name="" />
    </tx:attributes>
</tx:advice>

3.配置切入点,切面

<aop:config>
    切入点
	<aop:pointcut id="" express="切入点表达式"/>
    切面
    <aop:advisor advice-ref="事务id" pointcut-ref="切入点id" />
</aop:config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值