瞎说springboot

it2026-01-14  7

1、为什么需要springboot?

spring有两大核心能力,一个是IOC,一个是AOP

要实现IOC需要如下配置:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">       <bean id="user" class="ioc.User"/>      </beans>

当有大量的bean的时候,配置及管理就是一件比较繁琐的事情,于是引入了注解配置,当然需要先在xml里面显示引入自动扫描注解的能力,如下:

<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"        xsi:schemaLocation="      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">       <!-- 开启注解扫描,base-package指定扫描的包-->     <context:component-scan base-package="ioc"/>   </beans>

 

如果依赖了一些第三方包,可能没法在代码里面添加注解,这个时候又回到了xml手工配置时代

后来又引入了javaconfig的方式来实现bean的配置,即编写一个配置类,在配置类里面定义要配置的类,这种方式就特别灵活了,如下:

/**  * 配置类,可以声明任何的bean  */ @Configuration public class BeanConfig {       @Bean     public User user() {         return new User();     } }

 

@RunWith(SpringJUnit4ClassRunner.class) // 加载beanConfig配置类 @ContextConfiguration(classes = BeanConfig.class) public class SpringIocTest {       @Resource     private  User user;       @Test     public void test2() {         System.out.println(user);     }       // 输出结果:ioc.User@34b7ac2f }

太灵活造成的问题就是管理混乱,那如何即保留这种灵活性,有能有序的管理呢?这就是springboot要解决的问题

除此外,依赖配置也面临同样的问题,总之springboot就是为了简化配置,简化开发而提出的

AOP需要如下配置:

<?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: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 id="wmzService" class="com.example.demo.service.impl.WMZServiceImpl"></bean>  <bean id="zsService" class="com.example.demo.service.impl.ZSServiceImpl"></bean>  <!-- 切面类 -->  <bean id="OrderXmlAop" class="com.example.demo.aop.OrderXmlAop"></bean>    <!-- Aop配置 -->  <aop:config proxy-target-class="true">     <!-- 切面 -->   <aop:aspect ref="OrderXmlAop">    <!-- 前置通知: 在目标方法调用前执行 -->    <aop:before pointcut="execution(public * com.example.demo.service.TakeawayService.*(..)))" method="doBefore"/>    <!-- 后置通知: -->    <aop:after pointcut="execution(public * com.example.demo.service.TakeawayService.*(..)))" method="doAfter"/>    <!-- 返回后通知 -->    <aop:after-returning pointcut="execution(public * com.example.demo.service.TakeawayService.*(..)))" method="doAfterReturning"/>    <!-- 异常通知 -->    <aop:after-throwing pointcut="execution(public * com.example.demo.service.TakeawayService.*(..)))" method="doAfterThrowing"/>   </aop:aspect>  </aop:config> </beans>

跟之前一样,后来的发展也是到了javaconfig,通过配置类来配置aop

 

2、springboot的核心能力?

三个核心注解:

1 @Configuration 2 @EnableAutoConfiguration 3 @ComponentScan 4 public class Application { 5 public static void main(String[] args) { 6 SpringApplication.run(Application.class, args); 7 } 8 }

这是springboot应用的main入口,可以看到有三个注解,这三个注解非常核心

@configuration标注当前类是配置类

@EnableAutoConfiguration标注启动自动配置的功能,有了这个注解,可以根据pom里面配置的starter在自动分析要加载的依赖组件

@ComponentScan标注自动扫描spring组件,有了这个注解,可以识别并加载spring中声明的组件到bean容器了。否则你定义的组件就不会被spring管理,比如某个配置类就找不到,就不会配置

 

 

 

 

最新回复(0)