Spring框架总结

1.Spring是为了解决企业级应用开发的复杂性而创建的

2.Ioc概念:Ioc的中文叫控制反转,控制反转实际上就是指对一个对象控制权的反转。
3. Bean的获取:使用ClassPathXmlApplicationContext类去获取当前路径下的xml配置文件,再调用该类的getBean方法获取对象。

public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Book book = ctx.getBean(Book.class);
        System.out.println(book);
    }
}

方法的参数可以通过Class或者id去获取,如果通过Class去获取且xml文件中有两个Bean的话会报错,所以推荐使用id。

4.属性注入:再XML配置中属性注入有多种方式

  1. 构造方法注入
  2. set方法注入
  3. p名称空间注入
  4. 外部Bean的注入(静态工厂注入、实例工厂注入)

5.复杂属性的注入

  1. 对象注入:通过 ref 来引用一个对象

    <bean class="org.javaboy.User" id="user">
        <property name="cat" ref="cat"/>
    </bean>
    
  2. 数组注入:数组注入和集合注入在xml中配置相同

    <bean class="org.javaboy.User" id="user">
       <property name="cat" ref="cat"/>
       <property name="favorites">
           <array>
               <value>足球</value>
               <value>篮球</value>
               <value>乒乓球</value>
           </array>
       </property>
    </bean>
    
  3. Map注入

    <property name="map">
        <map>
            <entry key="age" value="99"/>
            <entry key="name" value="javaboy"/>
        </map>
    </property>```
    
    
  4. Properties注入

    <property name="info">
        <props>
            <prop key="age">99</prop>
            <prop key="name">javaboy</prop>
        </props>
    </property>
    

6.在Spring中,想要将一个Bean注册到Spring容器中,有三种不同的方式

  • XML注入
  • Java配置(通过Java代码将Bean注册到Spring容器中)
  • 自动化扫描

7.自动化配置:自动化配置可以通过Java配置来实现,也可以通过xml配置来实现

  1. 一个类要添加注解注册到Spring容器中,才能够实现自动扫描,自动扫描的方式有两种,一种是通过Java代码配置自动化扫描,另一种是通过xml文件

  2. Java代码配置自动扫描

    @Configuration
    @ComponentScan(basePackages = "org.javaboy.javaconfig.service")
    public class JavaConfig {
    }
    

    @ComponentScan注解指定要扫描的包

  3. XML配置自动化扫描

    <context:component-scan base-package="org.javaboy.javaconfig"/>
    
    
  4. 对象注入
    自动扫描时的对象注入有三种方式:
    1.@Autowired
    2.@Resources
    3.@Injected

@Autowired是根据类型去查找,如何赋值,但要求这个类型只可以有一个对象,不然会报错。
@Resources是根据名称去查找,允许一个可以存在多个实例。
@Qualifier 和 @Autowired一起使用可以实现通过变量名查找到变量,@Qualifier 可以指定变量名

8.Aop(Aspect Oriented Programming),面向切面编程,对面向对象思想的补充。面向切面编程是指程序运行时,不改变源码的情况下动态增强方法的功能。

Aop几个常见的概念:

概念说明
切点添加代码的地方
通知向切点动态添加代码
切面切点+通知
连接点切点的定义

Aop的实现
Aop是基于Java动态代理来实现的。
Java的动态代理有两种实现方式:

  • cglib
  • jdk

9.五种通知
Spring中的Aop通知类型有5种:

  • 前置通知
  • 后置通知
  • 异常通知
  • 返回通知
  • 环绕通知

10.JdbcTemplate:JdbcTemplate是Spring 利用Aop思想封装的JDBC操作工具

  • Java配置
@Configuration
public class JdbcConfig {
    @Bean
    DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("123");
        dataSource.setUrl("jdbc:mysql:///test01");
        return dataSource;
    }
    @Bean
    JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }
}
  • XML配置
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
    <property name="username" value="root"/>
    <property name="password" value="123"/>
    <property name="url" value="jdbc:mysql:///test01?serverTimezone=Asia/Shanghai"/>
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

11.事务:Spring中的事务主要是利用Aop思想,简化事务的配置,可以通过Java配置实现也可以通过XML配置。

  • XML配置:XML中配置事务分为三个步骤
    1.配置TransactionManager
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

2.配置事务要处理的方法

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="update*"/>
        <tx:method name="insert*"/>
        <tx:method name="add*"/>
        <tx:method name="delete*"/>
    </tx:attributes>
</tx:advice>

注:一旦配置了方法的名称规则之后,service中的方法要按照这里的名称规则来,否则事务配置不会生效
3.配置Aop

<aop:config>
    <aop:pointcut id="pc1" expression="execution(* org.javaboy.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pc1"/>
</aop:config>
  • Java配置
    要开启Java注解配置,要在XML配置中添加以下配置
<tx:annotation-driven transaction-manager="transactionManager" />

这个配置可以替代下面两个配置

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="update*"/>
        <tx:method name="insert*"/>
        <tx:method name="add*"/>
        <tx:method name="delete*"/>
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="pc1" expression="execution(* org.javaboy.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pc1"/>
</aop:config>

然后在需要添加事务的方法上,添加@Transactional注解,表示开启该方法的事务,注解也可以放在类上,表示这个类中的所有方法都开启事务

@Service
public class UserService {
    @Autowired
    UserDao userDao;
    @Transactional
    public void updateMoney() {
        userDao.addMoney("zhangsan", 200);
        int i = 1 / 0;
        userDao.minMoney("lisi", 200);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值