Spring依赖注入 Spring实现纯注解开发,配置AOP和增强

目录

1.Spring实现依赖注入有哪几种方式

2.Spring有哪些增强类型?

3.并分别说明有哪些特点 Spring配置AOP有哪几种方式?

4.什么是Spring的纯注解开发

5.不同数据类型的注入方法

6.纯注解开发怎么完成

        1.编写配置bean的java类

        2.使用注解配置bean

        3.使用注解自动装配

        4.扫描注解配置包

        Spring纯注解开发配置类

        5.使用注解连接jdbc

        6.编写测试类


1.Spring实现依赖注入有哪几种方式

  1. 构造方法注入(Constructor Injection):通过构造方法将依赖项传递给目标对象。可以使用<constructor-arg>元素或者@Autowired注解配合构造方法来实现。

  2.  

  3. Setter方法注入(Setter Injection):通过Setter方法为依赖项提供设置方法,然后在配置文件中使用<property>元素或者@Autowired注解进行注入。

  4.  

  5. 注解注入(Annotation injection):直接在目标对象的字段上使用@Autowired注解进行依赖注入。这种方式需要注意字段的可见性,通常应该将字段声明为私有,并提供公共的访问方法。

  6.  

  7. p命名注入(现在基本不适用了):直接在目标bean上即使使用p命名的方式直接给bean注入数据

  8.           如果使用p命名空间来注入bean的话只需要在属性后添加ref即可

2.Spring有哪些增强类型?

  1. 前置通知(Before Advice):在目标方法执行之前执行的增强。可以在方法执行前进行一些准备工作或者参数验证。

  2.  

  3. 后置通知(After Advice):在目标方法执行之后执行的增强,无论目标方法是否抛出异常。可以利用后置通知来完成一些资源清理、日志记录等操作。

  4.  

  5. 返回通知(After Returning Advice):在目标方法成功执行并返回结果后执行的增强。可以获取到目标方法的返回值并进行相关处理。

  6.  

  7. 异常通知(After Throwing Advice):在目标方法抛出异常后执行的增强。可以捕获目标方法抛出的异常,并根据需要进行相应的处理。

  8.  

  9. 环绕通知(Around Advice):在目标方法执行前后都可以执行的增强。环绕通知具有最大的灵活性,可以完全控制目标方法的执行过程,包括在目标方法执行前后进行自定义的逻辑处理。

  10.  

    package com.cskt.aspect;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    
    @Aspect
    public class MyAspect {
        //前置增强  方法前面 执行  后置增强  环绕增强  异常增强  最终增强
        //切面 Aspect  Advice  beforeAdvice pointCut
        // 给那个方法增强 。。。。。,
        @Before("execution( * com.cskt.pojo..*.*(..))")
        public void before(){
    
            System.out.println("前置通知.... 在方法之前要執行的公共代码放在这里");
        }
        /**
         * 后置通知
         * returnVal,切点方法执行后的返回值
         */
        @AfterReturning(value="execution(* com.cskt.pojo..*.*(..)))",returning = "returnVal")
        public void AfterReturning(Object returnVal){
            System.out.println("后置通知...."+returnVal
            );
        }
    
        /**
         * 环绕通知
         * @param joinPoint 可用于执行切点的类
         *                  具体什么业务
         * @return
         * @throws Throwable
         */
        @Around("execution(* com.cskt.pojo..*.*(..))")
        public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
            System.out.println("环绕通知前....");
    
            Object obj= (Object) joinPoint.proceed();
    
            System.out.println("环绕通知后....");
            return obj;
        }
        /**
         * 抛出通知
         * @param e
         */
        @AfterThrowing(value="execution(* com.cskt.pojo..*.*(..))",throwing = "e")
        public void afterThrowable(Throwable e){
            System.out.println("出现异常:msg="+e.getMessage());
        }
    
        /**
         * 无论什么情况下都会执行的方法
         */
        @After(value="execution(* com.cskt.pojo..*.*(..))")
        public void after(){
            //方法的对象的关闭
            //方法的回滚
            System.out.println("最终通知....");
        }
    }
    

3.并分别说明有哪些特点 Spring配置AOP有哪几种方式?

  1. 基于XML的配置:使用XML配置文件来定义切面、切点和增强逻辑。通过<aop:config>元素来进行AOP配置,包括定义切面和切点,以及将切面和切点与目标对象关联起来。

  2. 基于注解的配置:使用注解来定义切面、切点和增强逻辑。通过在切面类上添加@Aspect注解,切点方法上添加@Pointcut注解,以及在增强方法上添加@Before@After@Around等注解来实现AOP的配置。同时,可以通过在配置类上添加@EnableAspectJAutoProxy注解来启用自动代理功能。

  3. 使用Java配置类:通过使用Java配置类来定义切面、切点和增强逻辑。使用@Configuration注解标记配置类,通过在配置类中定义@Bean方法来创建切面对象,并使用@EnableAspectJAutoProxy注解开启自动代理功能。

4.什么是Spring的纯注解开发

Spring的纯注解开发是指在使用Spring框架进行应用开发时,完全依赖注解而不使用任何XML配置文件的开发方式。通过注解来配置和管理Bean、依赖注入、AOP等功能。

在传统的Spring开发中,我们需要在XML配置文件中定义Bean、配置依赖关系、事务管理、AOP切面等内容。而纯注解开发则将这些配置信息以注解的方式直接写在Java类中,使得开发更加简洁、灵活,并且能够更好地利用Java编译器进行静态检查。

在纯注解开发中,常用的注解包括:

  1. @Component:用于标识一个普通的Bean组件。
  2. @Controller:用于标识一个控制器类。
  3. @Service:用于标识一个服务类。
  4. @Repository:用于标识一个数据访问类(如DAO)。
  5. @Autowired:用于进行依赖注入,将其他Bean注入到当前Bean中。
  6. @Qualifier:用于指定具体的注入对象,解决多个同类型Bean的注入歧义性问题。
  7. @Value:用于注入属性值。
  8. @RequestMapping:用于映射URL路径和控制器方法的关系。
  9. @Aspect:用于定义切面类,实现AOP功能。
  10. @Transactional:用于标识事务处理方法。

5.不同数据类型的注入方法

        

  1. 普通类型注入:使用<value>标签或@Value注解配合集合格式的值进行注入。

    • XML配置方式:
       <bean id="exampleBean" class="com.example.ExampleBean"> <property name="setProperty"><value>value1</value>  </property> </bean> 
    • 注解方式:
       public class ExampleBean { @Value("111") private String setProperty; // ... }
  2. List注入:使用<list>标签或@Value注解配合列表格式的值进行注入。

    • XML配置方式:
       <bean id="exampleBean" class="com.example.ExampleBean"> <property name="listProperty"> <list> <value>value1</value> <value>value2</value> <value>value3</value> </list> </property> </bean> 
    • 注解方式:
       public class ExampleBean { @Value("${my.list}") private List<String> listProperty; // ... } 
  3. Set注入:使用<set>标签或@Value注解配合集合格式的值进行注入。

    • XML配置方式:
       <bean id="exampleBean" class="com.example.ExampleBean"> <property name="setProperty"> <set> <value>value1</value> <value>value2</value> <value>value3</value> </set> </property> </bean> 
    • 注解方式:
       

      java复制代码

      public class ExampleBean { @Value("${my.set}") private Set<String> setProperty; // ... }
  4. properties注入:使用<property>标签或@Property 注解配合集合格式的值进行注入。

    • XML配置方式:使用<context:property-placeholder>标签来加载属性文件,并通过${...}占位符引用属性值。

      xml复制代码

      <bean id="exampleBean" class="com.example.ExampleBean"> <property name="property1" value="${my.property1}" /> <property name="property2" value="${my.property2}" /> </bean>
    • 注解方式:使用@Value注解来注入属性值。

      java复制代码

      public class ExampleBean { @Value("${my.property1}") private String property1; @Value("${my.property2}") private int property2; // ... }
    • Java配置类方式:通过使用@PropertySource注解来加载属性文件,并使用@Value注解注入属性值。

      java复制代码

      @Configuration @PropertySource("classpath:config.properties") public class AppConfig { @Value("${my.property1}") private String property1; @Value("${my.property2}") private int property2; // ... }
  5. Map注入:使用<map>标签或@Value注解配合键值对格式的值进行注入。

    • XML配置方式:
       

      xml复制代码

      <bean id="exampleBean" class="com.example.ExampleBean"> <property name="mapProperty"> <map> <entry key="key1" value="value1"/> <entry key="key2" value="value2"/> <entry key="key3" value="value3"/> </map> </property> </bean>
    • 注解方式:
       

      java复制代码

      public class ExampleBean { @Value("#{${my.map}}") private Map<String, String> mapProperty; // ... }

6.纯注解开发怎么完成

        1.编写配置bean的java类

 

        2.使用注解配置bean

                

 

        3.使用注解自动装配

                如果有报错或者 运行显示没有找到,是因为自动装配是根据名称去找的,会根据变量名称去找的,我们可以归到名称或类型指定装配

 

        4.扫描注解配置包

 

        Spring纯注解开发配置类

        

package config;

import org.springframework.context.annotation.*;

@Configuration//表示配置文件类
@ComponentScan({"pojo","aop","mapper","config","service"})//扫描配置类
@PropertySource("database.properties")//配置属性元
@EnableAspectJAutoProxy
@Import({jdbcConfig.class,myBatisConfig.class})//导入配置类
public class SpringConfig {
}

        5.使用注解连接jdbc

        配饰文件导入properties

 

 

package config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class jdbcConfig {
    //1.定义一个方法获取要管理的对象
    //2.添加@Bean,表示当前方法的返回值是一个bean

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;


    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }
}

        6.编写测试类

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值