Spring笔记总结(Maven)

本文详细介绍了Spring框架的核心概念,包括IOC(依赖注入)和AOP(面向切面编程)。通过注解配置的方式展示了如何在Spring中进行实体类的配置、扫描包、读取属性文件以及实现声明式事物。此外,还涵盖了使用注解实现AOP的步骤,从创建通知类到测试完整流程。
摘要由CSDN通过智能技术生成

目录

一.spring介绍

二. IOC(依赖注入和控制反转)

 使用注解进行配置

三.AOP(面向切面编程) 

四.使用注解实现声明式事物


一.spring介绍

(1)Spring 2003年出生 , IOC 和 AOP两大基础 IOC 控制反转 (DI 依赖注入) AOP 面向切面编程;

(2)现在发展为:

  1. 二. IOC(依赖注入和控制反转)

1.在pom.xml添加依赖

<dependencies>
<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>5.3.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.16</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.16</version>
    </dependency>
  <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.3.16</version>
        </dependency></dependencies>

2.创建实体类

public class User1 {
    private int id;
    private String name;
    private int age;

    public User1() {
    }

    public User1(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "id:"+this.id+"  name:"+this.name+"  age:"+this.age;
    }
}

3.在spring.xml中配置bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="user1" class="com.gfxy.Ioc.test">
    <property name="id" value="1"></property>
    <property name="name" value="张三"></property>
    <property name="age" value="20"></property>
</bean>
  
</beans>

4. 测试

public class test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
        User1 user1= (User1) context.getBean("user1");
        System.out.print(user1);
    }
}

执行结果

 使用注解进行配置

 1.创建实体类

@Component("user")
@PropertySource(value = "classpath:c.properties",encoding ="utf-8")
public class User2 implements Serializable {
    @Value("${id}")
    private int id;
    @Value("${name}")
private  String name;
    @Value("${age}")
private  int age;
    public User2() {
    }

    public User2(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "id:"+this.id+"名称:"+this.name+"   年龄:"+this.age;
    }
}

2.在spring.xml中配置扫描包

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <context:component-scan base-package="com.gfxy.pojo"></context:component-scan>


</beans>

 3.创建c.properties文件并在其中配置value

4.测试

三.AOP(面向切面编程) 

1.导入依赖

 <!--aop-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.19</version>
        </dependency>

2.创建通知类

public class aspect {
    //前置通知
    public  void before(JoinPoint joinPoint){

        System.out.print("目标方法:"+joinPoint.getSignature().getName()+"-这是前置通知");
    }
    //后置通知
    public  void  after(JoinPoint joinPoint){
        System.out.print("目标方法:"+joinPoint.getSignature().getName()+"*这是后置通知");
    }
    //环绕通知
    public  void around(ProceedingJoinPoint pj){
        System.out.print("目标方法:"+pj.getSignature().getName()+"#这是环绕置通知");
    }
    //异常通知
    public void exception(){
        System.out.print("这是异常通知");
    }
}

3.创建方法

public class Log {

    public void insert() {
        System.out.print("插入数据成功");



    }
    public void  delete() {
        System.out.print("已被删除");

    }
}

4.配置spring-aop.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:content="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd"
>
    <!--注册bean-->
    <bean name="log" class="com.gfxy.aspect.Log"/>
    <bean name="aspect" class="com.gfxy.aspect.aspect"/>
<!--配置aop-->
    <aop:config>
        <!--配置切点-->
        <aop:pointcut id="pointcut" expression="execution(* com.gfxy.aspect.Log.*(..))"/>
        <!--配置切面-->
        <aop:aspect ref="aspect">
            <aop:before method="before" pointcut-ref="pointcut"/>
            <aop:after method="after" pointcut-ref="pointcut"/>
            <aop:around method="around" pointcut-ref="pointcut"/>
            <aop:after-throwing method="exception" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>
</beans>

5.测试

使用注解实现aop

1.创建方法

public class Log {

    public void insert() {
        System.out.print("插入数据成功");



    }
    public void  delete() {
        System.out.print("已被删除");

    }
}

2.创建方法


@Component
@Aspect

public class Myaspect {
    @Pointcut("execution(* com.gfxy.aspect.Log.*(..))")
public void pointcut(){

}
    @Before("pointcut()")
    public void myBefore(JoinPoint jp) {
        System.out.print("前置"+"函数名:"+jp.getSignature().getName()+"参数名:"+ Arrays.toString(jp.getArgs()));
    }
    @After("pointcut()")
    public void  myafter( JoinPoint jp) {
        System.out.print("后置"+"函数名"+jp.getSignature().getName());
    }
    @Around("pointcut()")
    public  void around(ProceedingJoinPoint pj){
        System.out.print("目标方法:"+pj.getSignature().getName()+"#这是环绕置通知");
    }
}

3.配置spring-aop.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
  <bean name="log" class="com.gfxy.aspect.Log"/>
    <context:component-scan base-package="com.gfxy.aspect"/>
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

4.测试

四.使用注解实现声明式事物

1.添加maven依赖

 <!--spring事务管理-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

2.创建普通类和方法(使用@Transactional注解)

@Transactional
public class JT {
    private JdbcTemplate jt;
public  void addUser(int id,String name){
    this.jt.update("update user set  name =? where id=1");

}

3.配置spring-jdbc.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:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <bean id="jt" class="com.gfxy.transactional.JT"/>
<!--加载资源-->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> >
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/user?serverTimezone=UTC&amp;characterEncoding=utf-8&amp;useSSL=false" ></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!-- spring对jdbc的封装类配置,用来执行jdbc sql(增删改查) -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 事物管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource"  ref="dataSource"></property>
    </bean>
    <!-- 启用注解事物管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

 4.测试

  1. public class test1 {
        public static void main(String[] args) {
            ApplicationContext context=new ClassPathXmlApplicationContext("spring-jdbc.xml");
            JT jt= (JT) context.getBean("jt");
            jt.addUser(1,"mvc");
            System.out.println("修改成功");
        }
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值