IOC、DI、AOP与Spring Boot常用注解

IOC、DI、AOP

  • IOC(inversion of control:控制反转)
    在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你想要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的类而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
    我们的容器不需要创建,直接丢给IOC,让它去创建整个bean的生命周期,包括它的依赖。
  • DI(dependency injection:依赖注入)
    容器通过调用set方法或者构造器来建立对象之间的额依赖关系。
    组件之间的依赖关系,是容器在运行的时候决定的
  • IOC是目标,DI是手段
  • AOP(aspect oriented programing:面向切面编程)
    spring aop使用了动态代理技术在运行期织入增强的代码,使用了两种代理机制,一种是基于jdk的动态代理,另一种是基于CGLib的动态代理
    在这里插入图片描述

Spring Boot常用注解

  1. @RequestMapping: 是一个用来处理请求地址映射的注解,它提供路由信息,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。它告诉Spring任何 来自"/"路径的HTTP请求都应该被映射到index方法。

  2. @RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者。

  3. @Profiles: Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定环境下生效。任何@Component或@Configuration都能被@Prefiles标记,从而限制加载它时 机。

  4. @ResponseBody: 表示该方法的返回结果直接写入 HTTP response body中,一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上 @Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。 比如异步获取json数据,加上@Responsebody后,会直接返回json数据。

  5. @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。一般公 共的方法我会用上这个注解。

  6. @Autowired: byType方式,把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不会报错。

  7. @RequestParam:用在方法的参数前面。 @RequestParam String a = request.getParameter(“a”);

  8. @PathVariable:路径变量。

RequestMapping("user/get/mac/{macAddress}") 
public String getByMacAddress(@PathVariable String macAddress){ 
	//do something; 
}
  1. 全局处理异常的: @ControllerAdvice: 包含@Component。可以被扫描到, 统一处理异常。 @ExceptionHandler(Exception.class): 用在方法上面表示遇到这个异常就执行以下方法。
/**
 *
 */ 全局异常处理
@ControllerAdvice
class GlobalDefaultExceptionHandler {
    public static final String DEFAULT_ERROR_VIEW = "error";
    
    @ExceptionHandler({TypeMismatchException.class, NumberFormatException.class})
    public ModelAndView formatErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        ModelAndView mav = new ModelAndView();
        mav.addObject("error", "参数类型错误");
        mav.addObject("exception", e);
        mav.addObject("url", RequestUtils.getCompleteRequestUrl(req));
        mav.addObject("timestamp", new Date());
        mav.setViewName(DEFAULT_ERROR_VIEW);
        return mav;
    }
}
  1. 通过@value注解来读取application.properties里面的配置

  2. @Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用 为:配置spring容器(应用上下文)

  3. @Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的,作用为注册bean对象

    注:
    (1)、@Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;
    (2)、@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;

@Configuration
public class TestConfiguration {

    public TestConfiguration() {
        System.out.println("spring容器启动初始化。。。");
    }

    //@Bean 注解注册testNean" bean, 同时可以指定初始化和销毁方法 //@Bean(name=" ,initMethod="start",destroyMethod="cleanUp")
    @Bean
    @Scope("prototype")
    public TestBean testBean() {
        return new TestBean();
    }
}

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class); // 获取tb bean 

        TestBean = context.getBean("testBean");
        tb.sayHello();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值