Spring大白话(●—●)

目录

🧡IoC

🍠基于XML(了解)

🍠基于注解(常见)

🧡AOP

🍠创建切面类

🍠实现类添加@Component

🍠配置自动扫包,开启自动生成代理

🍠使用


💟这里是CS大白话专场,让枯燥的学习变得有趣!

💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!

💟好记性不如烂键盘,自己总结不如收藏别人!

💌Spring是一个优秀的Java开发框架,通过如下策略简化了开发过程:

🍠基于POJO(Plain Ordinary Java Object)的轻量级和最小侵入性编程;

🍠通过依赖注入和面向接口实现松耦合;

🍠基于切面和惯例进行声明式编程;

🍠通过切面和模板减少样板式代码。

💌乍一看是不是很懵,这些策略与Spring中最重要的两个核心IOC和AOP有关,我们需要先深刻理解IOC和AOP到底是干什么事!

🧡IoC

💌二话不说先翻译:IoC(Inversion of Control)中文名:控制反转。它是Spring全家桶各个功能模块的基础,是用于给每个模块创建对象的容器。简单点说就是在使用框架的时候,IoC自动创建、组装好了所有的组件,开发者直接用就行了,拿来吧你!

有两种方式使用IoC:

🍠基于XML(了解)

开发者在XML中配置需要的对象,Spring根据XML文件内容来创建对象。

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

🍠基于注解(常见)

1、@Configuration配置类:用一个Java类BeanConfiguration替代XML文件,把XML中的配置放到配置类@Bean中。

@Configuration
public class BeanConfiguration{
    @Bean(value= "config") //如果不设置value/name,则默认类名dataConfig
    public DataConfig dataConfig(){
        DataConfig dataConfig = new DataConfig();
        DataConfig.setDrivername("Driver");
        ...
        return dataConfig;
    }
}
ApplicationContext context = new AnnotationConfigApplicationContext(BeanConfiguration.class);
System.out.println(context.getBean("config")); //默认"dataConfig"或直接Dataconfig.class

2、扫包+注解:不需要依赖XML和配置类,直接由目标类添加注解@Component来创建bean,对参数添加注解@Value可进行赋值。有注解的类会被加载到IoC中,在扫描IoC包的时候可进行读取。

@Data
@Component("config")
public class DataConfig{
    @Value("Driver")
    private String driverName;
    ...
}
ApplicationContext context = new AnnotationConfigApplicationContext("com.southwind.ioc");

P.S.@Autowired自动创建对象,通过类型完成依赖注入。 使用@Qualifier可通过名字查找。

💌到这里就有个问题,这跟控制反转有什么关系呢?这里的控制指的就是对象创建的权利,反转则是一个把控制权外部框架的大动作,我们无需手动创建对象,交给IoC去处理。

🧡AOP

💌二话不说先翻译:AOP(Aspect-Oriented Programming)中文名:面向切面编程。 它也是以IoC为基础的,将切面抽象化成对象进行编程,将日志代码与业务代码解耦合,依旧是面向对象的思维。应用:打印日志、事务、权限处理等。看图说话更易理解:

💌简单地说就是把相同位置相同的操作提取出来,创建一个切面类来封装这些操作。整体实现流程如下:

🍠创建切面类

@Component
@Aspect
public class LoggerAspect{
    @Before("execution(public int com.southwind.aop.CalImpl.*(..))")
    public void before(JoinPoint joinPoint){
        String name = joinPoint.getSignature().getName();
        System.out.println(name + "参数:" + Arrays.toString(joinPoint.getArgs()));
    }

    @AfterReturning(value="execution(public int com.southwind.aop.CalImpl.*(..))",returning="result")
    public void afterReturning(JoinPoint joinPoint,Object result){
        String name = joinPoint.getSignature().getName();
        System.out.println(name + "结果:" + result);
    }
}

🍠实现类添加@Component

@Component
public class CalImpl implements Cal{
    @Override
    public int add(int a, int b){
        int result = a + b;
        return result;
    }
    ...
}

🍠配置自动扫包,开启自动生成代理

💌非常重要的一步,我们调用的是生成的代理对象,是由实现类和切面类共同产生的,一个切面类只能对应一个实现类,若没有生成代理,或实现类对应错误,则不会打印切面类的内容。SpringBoot中此步已自动配置。

<context:component-scan base-package="com.southwind.aop"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

🍠使用

public class Test{
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Cal bean = context.getBean(Cal.class);
        System.out.println(bean.add(1,2));
        ...
    }
}

💌那么话说回来,Spring是怎么简化开发的捏?文章开头的四点就好理解了:

IoC的核心功能:

🍠基于POJO(Plain Ordinary Java Object)的轻量级和最小侵入性编程;

把bean交给容器来控制,无需人为干预,我们只需编写业务逻辑,框架不会对我们产生限制。

🍠通过依赖注入和面向接口实现松耦合;

通过DI完成属性赋值操作,通过接口实现Spring框架的二次开发扩展。

AOP的核心功能:

🍠基于切面和惯例进行声明式编程;

帮我们控制事务的回滚、提交。

🍠通过切面和模板减少样板式代码。

将日志代码写入切面对象,不需要更改核心业务代码,只需要在切面类中编写在哪些地方进行切入。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值