精华内容
下载资源
问答
  • Spring常用注解

    2017-03-22 22:55:01
    spring常用注解,测试环境myeclipse 版本Version: 10.0 jdk 1.8 junit4
  • spring 常用注解

    2018-10-22 17:55:42
    自己整理的一些常见的spring注解,文件是xmind的,平时用于梳理记忆
  • 下面小编就为大家分享一篇Spring常用注解 使用注解来构造IoC容器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • spring常用注解

    2021-02-24 09:36:00
    文章内容主要是spring常用注解,在开发时方便查看,以便更深的记忆
  • 主要介绍了Spring常用注解及自定义Filter的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 精进Spring—Spring常用注解【经典总结】

    万次阅读 多人点赞 2017-07-29 11:02:21
    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大...

    做一个积极的人

    编码、改bug、提升自己

    我有一个乐园,面向编程,春暖花开!

    =================================================

    分享一个牛逼老师的人工智能教程。零基础!通俗易懂!风趣幽默(偶尔开开车,讲讲黄段子)!
    如果你对人工智能感兴趣,可以看看!
    希望你也加入到人工智能的队伍中来,点击这里查看教程

    =================================================

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。
    Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!
    下面按照分类讲解Spring中常用的一些注解。

    一: 组件类注解

    思考:Spring怎么知道应该把哪些Java类当成bean注册到容器中呢?
    答案:使用配置文件或者注解的方式进行标识需要处理的java类!
    

    1、注解类介绍

    @Component :标准一个普通的spring Bean类。 @Repository:标注一个DAO组件类。 @Service:标注一个业务逻辑组件类。 @Controller:标注一个控制器组件类。 这些都是注解在平时的开发过程中出镜率极高,@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。 @Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。如下代码
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Controller {
        String value() default "";
    }
    
    

    这里写图片描述

    2、举例详解

    (1)当一个组件代表数据访问层(DAO)的时候,我们使用@Repository进行注解,如下
    @Repository
    public class HappyDaoImpl implements HappyDao{
    private final static Logger LOGGER = LoggerFactory.getLogger(HappyDaoImpl .class);
    public void  club(){
            //do something ,like drinking and singing
        }
    }
    

    (2)当一个组件代表业务层时,我们使用@Service进行注解,如下

    @Service(value="goodClubService")
    //使用@Service注解不加value ,默认名称是clubService
    public class ClubServiceImpl implements ClubService {
        @Autowired
        private ClubDao clubDao;
      
        public void doHappy(){
            //do some Happy
        }
     }
    

    (3)当一个组件作为前端交互的控制层,使用@Controller进行注解,如下

    @Controller
    public class HappyController {
    	@Autowired //下面进行讲解
        private ClubService clubService;
        
    	// Control the people entering the Club
    	// do something
    }
    /*Controller相关的注解下面进行详细讲解,这里简单引入@Controller*/
    

    3、总结注意点

    1、被注解的java类当做Bean实例,Bean实例的名称默认是Bean类的首字母小写,其他部分不变。@Service也可以自定义Bean名称,但是必须是唯一的! 2、尽量使用对应组件注解的类替换@Component注解,在spring未来的版本中,@Controller,@Service,@Repository会携带更多语义。并且便于开发和维护! 3、指定了某些类可作为Spring Bean类使用后,最好还需要让spring搜索指定路径,在Spring配置文件加入如下配置:
    <!-- 自动扫描指定包及其子包下的所有Bean类 -->
    <context:component-scan base-package="org.springframework.*"/>
    

    二:装配bean时常用的注解

    1、注解介绍

    @Autowired:属于Spring 的org.springframework.beans.factory.annotation包下,可用于为类的属性、构造器、方法进行注值 @Resource:不属于spring的注解,而是来自于JSR-250位于java.annotation包下,使用该annotation为目标bean指定协作者Bean。 @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

    2、举例说明

    (1):@Autowired
    
    @Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, 
    ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Autowired {
        boolean required() default true;
    }
    
    @Controller
    public class HappyController {
    	@Autowired //默认依赖的ClubDao 对象(Bean)必须存在
    	//@Autowired(required = false) 改变默认方式
    	@Qualifier("goodClubService")
        private ClubService clubService;
        
    	// Control the people entering the Club
    	// do something
    }
    
    

    (2):@Resource

    @Target({TYPE, FIELD, METHOD})
    @Retention(RUNTIME)
    public @interface Resource {
     String name() default "";
     Class type() default java.lang.Object.class;
    
    
    
    public class AnotationExp {
    
        @Resource(name = "HappyClient")
        private HappyClient happyClient;
        
        @Resource(type = HappyPlayAno .class)
        private HappyPlayAno happyPlayAno;
    }
    

    3、总结

    (1):相同点 @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。 (2):不同点

    a:提供方 @Autowired是Spring的注解,@Resource是javax.annotation注解,而是来自于JSR-250,J2EE提供,需要JDK1.6及以上。
    b :注入方式 @Autowired只按照Type 注入;@Resource默认按Name自动注入,也提供按照Type 注入;
    c:属性
    @Autowired注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用),如果需要改变这种默认方式,可以设置其required属性为false。
    还有一个比较重要的点就是,@Autowired注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合**@Qualifier**注解进行限定,指定注入的bean名称。
    @Resource有两个中重要的属性:name和type。name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
    需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

    d:@Resource注解的使用性更为灵活,可指定名称,也可以指定类型 ;@Autowired注解进行装配容易抛出异常,特别是装配的bean类型有多个的时候,而解决的办法是需要在增加@Qualifier进行限定。

    Spring中 @Autowired注解与@Resource注解的区别

    注意点:使用@Resource也要注意添加配置文件到Spring,如果没有配置component-scan

    <context:component-scan> 
    <!--<context:component-scan>的使用,是默认激活<context:annotation-config>功能-->
    

    则一定要配置 annotation-config

    <context:annotation-config/>
    

    三:@Component vs @Configuration and @Bean

    1、简单介绍

    Spring的官方团队说@Component可以替代 @Configuration注解,事实上我们看源码也可以发现看到,如下
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component  //看这里!!!
    public @interface Configuration {
        String value() default "";
    
    

    虽然说可以替代但是两个注解之间还是有区别的!

    Bean注解主要用于方法上,有点类似于工厂方法,当使用了@Bean注解,我们可以连续使用多种定义bean时用到的注解,譬如用@Qualifier注解定义工厂方法的名称,用@Scope注解定义该bean的作用域范围,譬如是singleton还是prototype等。

    Spring 中新的 Java 配置支持的核心就是@Configuration 注解的类。这些类主要包括 @Bean 注解的方法来为 Spring 的 IoC 容器管理的对象定义实例,配置和初始化逻辑。

    使用@Configuration 来注解类表示类可以被 Spring 的 IoC 容器所使用,作为 bean 定义的资源。

    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyServiceImpl();
        }
    }
    

    这和 Spring 的 XML 文件中的非常类似

    <beans>
        <bean id="myService" class="com.acme.services.MyServiceImpl"/>
    </beans>
    

    @Bean 注解扮演了和元素相同的角色。

    2、举例说明@Component 和 @Configuration

    @Configuration
    public static class Config {
    
        @Bean
        public SimpleBean simpleBean() {
            return new SimpleBean();
        }
    
        @Bean
        public SimpleBeanConsumer simpleBeanConsumer() {
            return new SimpleBeanConsumer(simpleBean());
        }
    }
    
    @Component
    public static class Config {
    
        @Bean
        public SimpleBean simpleBean() {
            return new SimpleBean();
        }
    
        @Bean
        public SimpleBeanConsumer simpleBeanConsumer() {
            return new SimpleBeanConsumer(simpleBean());
        }
    }
    

    第一个代码正常工作,正如预期的那样,SimpleBeanConsumer将会得到一个单例SimpleBean的链接。第二个配置是完全错误的,因为Spring会创建一个SimpleBean的单例bean,但是SimpleBeanConsumer将获得另一个SimpleBean实例(也就是相当于直接调用new SimpleBean() ,这个bean是不归Spring管理的),既new SimpleBean() 实例是Spring上下文控件之外的。

    3、原因总结

    使用@ configuration,所有标记为@ bean的方法将被包装成一个CGLIB包装器,它的工作方式就好像是这个方法的第一个调用,那么原始方法的主体将被执行,最终的对象将在spring上下文中注册。所有进一步的调用只返回从上下文检索的bean。

    在上面的第二个代码块中,新的SimpleBeanConsumer(simpleBean())只调用一个纯java方法。为了纠正第二个代码块,我们可以这样做

    @Component
    public static class Config {
        @Autowired
        SimpleBean simpleBean;
    
        @Bean
        public SimpleBean simpleBean() {
            return new SimpleBean();
        }
    
        @Bean
        public SimpleBeanConsumer simpleBeanConsumer() {
            return new SimpleBeanConsumer(simpleBean);
        }
    }
    

    Spring @Configuration vs @Component
    基本概念:@Configuration 和@Bean

    四:spring MVC模块注解

    1、web模块常用到的注解

    • @Controller :表明该类会作为与前端作交互的控制层组件,通过服务接口定义的提供访问应用程序的一种行为,解释用户的输入,将其转换成一个模型然后将试图呈献给用户。
    @Controller
    public class HappyController {
    	//do something
    ...
    }
    

    Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件(配置文件中配置扫描路径)并自动注册。

    • @RequestMapping : 这个注解用于将url映射到整个处理类或者特定的处理请求的方法。可以只用通配符!
    @Controller
    @RequestMapping("/happy")
    public class HappyController  {
    
      @Autowired
      private HappyService happyService;
      
      @RequestMapping(/hello/*)
      public void sayHello(){
    		//请求为 /happy/hello/* 都会进入这个方法!
    		//例如:/happy/hello/123   /happy/hello/adb
    		//可以通过get/post 请求
      }
      @RequestMapping(value="/haha",method=RequestMethod.GET)
      public void sayHaHa(){
      //只能通过get请求
      }
    ...
    }
    

    @RequestMapping 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到 /favsoft 路径下。@RequestMapping中可以使用 method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。

    • @RequestParam :将请求的参数绑定到方法中的参数上,有required参数,默认情况下,required=true,也就是改参数必须要传。如果改参数可以传可不传,可以配置required=false。
     @RequestMapping("/happy")
      public String sayHappy(
      @RequestParam(value = "name", required = false) String name,
      @RequestParam(value = "age", required = true) String age) {
      //age参数必须传 ,name可传可不传
      ...
      }
    
    • @PathVariable : 该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。
    @RequestMapping(value="/happy/{dayid}",method=RequestMethod.GET)
    public String findPet(@PathVariable String dayid, Model mode) {
    //使用@PathVariable注解绑定 {dayid} 到String dayid
    }
    

    @PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。Spring会自动将其转换成合适的类型或者抛出 TypeMismatchException异常。当然,我们也可以注册支持额外的数据类型。
    @PathVariable支持使用正则表达式,这就决定了它的超强大属性,它能在路径模板中使用占位符,可以设定特定的前缀匹配,后缀匹配等自定义格式。

    • @RequestBody : @RequestBody是指方法参数应该被绑定到HTTP请求Body上。
    @RequestMapping(value = "/something", method = RequestMethod.PUT)
    public void handle(@RequestBody String body,@RequestBody User user){
       //可以绑定自定义的对象类型
    }
    
    • @ResponseBody : @ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。
      @ResponseBody在输出JSON格式的数据时,会经常用到。
    @RequestMapping(value = "/happy", method =RequestMethod.POST)
    @ResponseBody
    public String helloWorld() {    
    return "Hello World";//返回String类型
    }
    
    • @RestController :控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody。

    • @ModelAttribute :@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。
      该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用。

    @ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。

    五:Spring事务模块注解

    1、常用到的注解

    在处理dao层或service层的事务操作时,譬如删除失败时的回滚操作。使用**@Transactional** 作为注解,但是需要在配置文件激活
    <!-- 开启注解方式声明事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
    

    2、举例

    @Service
    public class CompanyServiceImpl implements CompanyService {
      @Autowired
      private CompanyDAO companyDAO;
    
      @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
      public int deleteByName(String name) {
    
        int result = companyDAO.deleteByName(name);
        return result;
      }
      ...
    }
    

    3、总结

    事务的传播机制和隔离机制比较重要!
    事务传播行为类型说明
    PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
    PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
    PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。
    PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。
    PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常
    PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作

    一图学习 Spring事务传播性


    readOnly : 事务的读写属性,取true或者false,true为只读、默认为false
    rollbackFor : 回滚策略,当遇到指定异常时回滚。譬如上例遇到异常就回滚
    timeout (补充的) : 设置超时时间,单位为秒
    isolation : 设置事务隔离级别,枚举类型,一共五种

    类型说明
    DEFAULT采用数据库默认隔离级别
    READ_UNCOMMITTED读未提交的数据(会出现脏读取)
    READ_COMMITTED读已提交的数据(会出现幻读,即前后两次读的不一样)
    REPEATABLE_READ可重复读,会出现幻读
    SERIALIZABLE 串行化(对资源消耗较大,一般不使用)
    透彻的掌握 Spring 中@transactional 的使用 Spring事务配置及事务的传播性与隔离级别详解

    参考博文

    spring 常用注解 详解Spring MVC 4常用的那些注解

    史上最全最强SpringMVC详细示例实战教程


    欢迎访问我的csdn博客,我们一同成长!

    不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

    博客首页:http://blog.csdn.net/u010648555

    展开全文
  • Spring 常用注解

    2018-03-29 10:22:15
    Spring常用注解汇总 本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包)。 < context:component-scan base-package =...

    原地址:http://www.cnblogs.com/xiaoxi/p/5935009.html

    1@Autowired

    @Autowired顾名思义,就是自动装配其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。

    @Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。

    2、Qualifier(指定注入Bean的名称)

    如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称,

    3、Resource

    @Resource注解与@Autowired注解作用非常相似,

    说一下@Resource的装配顺序:
    (1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
    (2)、指定了name或者type则根据指定的类型去匹配bean
    (3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

    然后,区分一下@Autowired和@Resource两个注解的区别:
    (1)、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    (2)、@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
    Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。


    1、@Component
    @Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。

    2、@Controller
    @Controller对应表现层的Bean,也就是Action

    3、@Service

    @Service对应的是业务层Bean

    @Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:在Action只需要声明一个名字叫"userService"的变量来接收由Spring注入的"userService"即可,具体代码如下:

    // 注入userService
    @Resource(name = "userService")
    private UserService userService;

    4、@ Repository
    @Repository对应数据访问层Bean ,例如:

    @Repository(value="userDao")
    public class UserDaoImpl extends BaseDaoImpl<User> {
    ………
    }

    @Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫"userDao"的UserDaoImpl实例。

    当Service需要使用Spring创建的名字叫"userDao"的UserDaoImpl实例时,就可以使用@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。

    // 注入userDao,从数据库中根据用户Id取出指定用户时需要用到
    @Resource(name = "userDao")
    private BaseDao<User> userDao;

    —————————————————————————————————————————————————————————————————————


    Spring常用注解汇总
    本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下:

    使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包)。

    <context:component-scan base-package="cn.test"/> 

    @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
    @Scope注解 作用域
    @Lazy(true) 表示延迟初始化
    @Service用于标注业务层组件、
    @Controller用于标注控制层组件(如struts中的action)
    @Repository用于标注数据访问组件,即DAO组件。
    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
    @Scope用于指定scope作用域的(用在类上)
    @PostConstruct用于指定初始化方法(用在方法上)
    @PreDestory用于指定销毁方法(用在方法上)
    @DependsOn:定义Bean初始化及销毁时的顺序
    @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
    @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
    @Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
    @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
    @PostConstruct 初始化注解
    @PreDestroy 摧毁注解 默认 单例  启动就加载
    @Async异步方法调用


    展开全文
  • Spring常用注解(绝对经典)

    万次阅读 多人点赞 2020-07-14 23:43:42
    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大...

    🍅 Java学习路线配套文章:搬砖工逆袭Java架构师

    🍅 基础推荐:Java基础教程系列

    🍅 实战推荐:Spring Boot基础教程

    🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

    🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

    🍅 欢迎点赞 👍 收藏 ⭐留言 📝  

    目录

    一、前言

    1、xml和注解的最佳实践:

    2、使用注解唯一需要注意的就是,必须开启注解的支持:

    二、Spring的常用注解

    1、给容器中注入组件

    2、注入bean的注解

    3、@JsonIgnore

    4、初始化和销毁方法

    5、Java配置类相关注解

    6、切面(AOP)相关注解

    7、@Bean的属性支持

    8、@Value注解

    9、环境切换

    10、异步相关

    11、定时任务相关

    12、Enable***注解说明

    13、测试相关注解

    14、@EqualsAndHashCode

    15、XmlAccessorType

    16、@SuppressWarnings

    三、SpringMVC常用注解

    1、@EnableWebMvc

    2、@Controller

    3、@RequestMapping

    4、@ResponseBody

    5、@RequestBody

    6、@PathVariable

    7、@RestController

    8、@ControllerAdvice

    9、@ExceptionHandler

    10、@InitBinder

    11、@ModelAttribute

    12、@Transactional 

     四、其它注解

    1、@JsonIgnore

    2、@Schema

    五、json常用注解

    1、@JsonIgnoreProperties

    2、@JsonIgnore

    3、@JsonFormat

    4、@JsonSerialize

    5、@JsonDeserialize

    6、@Transient

    7、@JsonIgnoreType

    8、@JsonProperty

    9、只在序列化情况下生效的注解

    10、在反序列化情况下生效的注解


    一、前言

    最近在看B站颜群老师的课程,Javaweb>spring>springMVC>mybatis>spring高级,一路走来,跌跌撞撞,发现spring也不过尔尔,说白了,spring就是想尽办法将new做的更简单,更完美,更可配置。

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。

    Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!

    注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置。

    1、xml和注解的最佳实践:

    • xml用来管理bean;
    • 注解只负责完成属性的注入;

    2、使用注解唯一需要注意的就是,必须开启注解的支持:

    ​<context:component-scan base-package="com.guo"></context:component-scan>
    <context:annotation-config/>

    二、Spring的常用注解

    1、给容器中注入组件

    (1)包扫描+组件标注注解

    @Component:泛指各种组件

    @Controller、@Service、@Repository都可以称为@Component。

    @Controller:控制层

    @Service:业务层

    @Repository:数据访问层

    (2)@Bean

    导入第三方包里面的注解

    (3)@Import

    @Import(要导入到容器中的组件);

    @Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
    public class MainConfig2 {
    	@Scope("prototype")
    	@Bean("person")
    	public Person person() {
    		System.out.println("我是Person");
    		return new Person("素小暖",25);
    	}
    }

    @ImportSelector:返回需要导入的组件的全类名数组;

    public class MyImportSelector implements ImportSelector {
        //返回值就是导入容器的组件全类目
        // AnnotationMetadata 当前标注@Import注解的类的所有注解信息
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            //importingClassMetadata.get
            return new String[]{"com.atguigu.bean.Blue","com.atguigu.bean.Red"};
        }
    }

    @ImportBeanDefinitionRegistrar:手动注册bean到容器中;

    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
        /*
        * AnnotationMetadata:当前类的注解信息
        * BeanDefinitionRegistry:BeanDefinition注册类
        * 把所有需要添加到容器中的bean,调用BeanDefinitionRegistry.registerBeanDefinition手动注入
        *
        * */
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            boolean definition = registry.containsBeanDefinition("com.atguigu.bean.Red");
            boolean definition2 = registry.containsBeanDefinition("com.atguigu.bean.Blue");
            if(definition && definition2){
                //指定bean定义信息(bean的类型,bean的scope)
                RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(RainBow.class);
                //注册一个bean,指定bean名
                registry.registerBeanDefinition("rainBow",rootBeanDefinition);
            }
        }
    }

    (4)使用spring提供的FactoryBean(工厂Bean)

    • 默认获取到的是工厂Bean调用getObject创建的对象
    • 要获取工厂Bean本身,需要在id前面加一个&
    @Bean
    public ColorFactoryBean colorFactoryBean(){
        return new ColorFactoryBean();
    }
    //创建一个spring定义的FactoryBean
    public class ColorFactoryBean implements FactoryBean<Color> {
        //返回一个Color对象,并将Color添加到容器中
        public Color getObject() throws Exception {
            System.out.println("ColorFactoryBean,getObject()");
            return new Color();
        }
    
        public Class<?> getObjectType() {
            return Color.class;
        }
    
        public boolean isSingleton() {
            return false;
        }
    }

    2、注入bean的注解

    @Autowired:由bean提供

    • @Autowired可以作用在变量、setter方法、构造函数上;
    • 有个属性为required,可以配置为false;

    @Inject:由JSR-330提供

    • @Inject用法和@Autowired一样。

    @Resource:由JSR-250提供

    @Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的,@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用。

    @Primary

    让spring进行自动装配的时候,默认使用首选的bean,和@Qualifier一个效果。

    3、@JsonIgnore

    (1)作用

    在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

    (2)使用方法

    一般标记在属性或者方法上,返回的json数据即不包含该属性。

    (3)注解失效

    如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false),使用方法一样。

    4、初始化和销毁方法

    (1)通过@Bean(initMethod="init",destoryMethod="destory")方法

    (2)通过bean实现InitializingBean来定义初始化逻辑,DisposableBean定义销毁逻辑

    (3)可以使用JSR250:@PostConstruct:初始化方法;@PreDestory:销毁方法。

    (4)BeanPostProcessor:bean的后置处理器,在bean初始化前后进行一些处理工作

    postProcessBeforeInitialization:在初始化之前工作;

    postProcessAfterInitialization:在初始化工作之后工作;

    5、Java配置类相关注解

    @Configuration

    声明当前类为配置类;

    @Bean

    注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式;

    @ComponentScan

    用于对Component进行扫描;

    6、切面(AOP)相关注解

    Spring AOP详细介绍

    Spring支持AspectJ的注解式切面编程。

    @Aspect 声明一个切面

    @After 在方法执行之后执行(方法上)

    @Before 在方法执行之前执行(方法上)

    @Around 在方法执行之前与之后执行(方法上)

    @PointCut 声明切点

    在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持

    7、@Bean的属性支持

    @Scope设置类型包括:

    设置Spring容器如何新建Bean实例(方法上,得有@Bean)

    ① Singleton

    (单例,一个Spring容器中只有一个bean实例,默认模式),

    ② Protetype

    (每次调用新建一个bean),

    ③ Request

    (web项目中,给每个http request新建一个bean),

    ④ Session

    (web项目中,给每个http session新建一个bean),

    ⑤ GlobalSession

    (给每一个 global http session新建一个Bean实例)

    8、@Value注解

    (1)支持如下方式的注入:

    • 注入普通字符
    • 注入操作系统属性
    • 注入表达式结果
    • 注入其它bean属性
    • 注入文件资源
    • 注入网站资源
    • 注入配置文件

    (2)@Value三种情况的用法。

    1. ${}是去找外部配置的参数,将值赋过来
    2. #{}是SpEL表达式,去寻找对应变量的内容
    3. #{}直接写字符串就是将字符串的值注入进去

    9、环境切换

    @Profile

    指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。

    @Conditional

    通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。

    10、异步相关

    @EnableAsync

    配置类中通过此注解开启对异步任务的支持;

    @Async

    在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

    11、定时任务相关

    @EnableScheduling

    在配置类上使用,开启计划任务的支持(类上)

    @Scheduled

    来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

    12、Enable***注解说明

    这些注解主要是用来开启对xxx的支持:

    • @EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
    • @EnableAsync:开启异步方法的支持;
    • @EnableScheduling:开启计划任务的支持;
    • @EnableWebMvc:开启web MVC的配置支持;
    • @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
    • @EnableJpaRepositories:开启对SpringData JPA Repository的支持;
    • @EnableTransactionManagement:开启注解式事务的支持;
    • @EnableCaching:开启注解式的缓存支持;

    13、测试相关注解

    @RunWith

    运行器,Spring中通常用于对JUnit的支持

    @ContextConfiguration

    用来加载配置配置文件,其中classes属性用来加载配置类。

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath*:/*.xml"})
    public class CDPlayerTest {
    
    }

    @ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试。

    @ContextConfiguration括号里的locations = {"classpath*:/*.xml"}就表示将classpath路径里所有的xml文件都包括进来,自动扫描的bean就可以拿到,此时就可以在测试类中使用@Autowired注解来获取之前自动扫描包下的所有bean。

    14、@EqualsAndHashCode

    任意类的定义都可以添加@EqualsAndHashCode注解,让lombok帮你生成equals(Object other)hashCode()方法的实现。默认情况下会使用非静态和非transient型字段来生成,但是你也通过在字段上添加 @EqualsAndHashCode.Include 或者@EqualsAndHashCode.Exclude 修改你使用的字段(甚至指定各种方法的输出)。或者你也可以通过在类上使用 @EqualsAndHashCode(onlyExplicitlyIncluded = true) ,且在特定字段或特定方法上添加 @EqualsAndHashCode.Include 来指定他们。

    如果将@EqualsAndHashCode添加到继承于另一个类的类上,这个功能会有点棘手。一般情况下,为这样的类自动生成equalshashCode方法是一个坏思路,因为超类也有定义了一些字段,他们也需要equals/hashCode方法但是不会自动生成。通过设置callSuper=true,可以在生成的equalshashCode方法里包含超类的方法。对于hashCode,·super.hashCode()·会被包含在hash算法内,而对于equals,如果超类实现认为它与传入的对象不一致则会返回false。注意:并非所有的equals都能正确的处理这样的情况。然而刚好lombok可以,若超类也使用lombok来生成equals方法,那么你可以安全的使用它的equals方法。如果你有一个明确的超类, 你得在callSuper上提供一些值来表示你已经斟酌过,要不然的话就会产生一条警告信息。

    当你的类没有继承至任何类(非java.lang.Object, 当然任何类都是继承于Object类的),而你却将callSuer置为true, 这会产生编译错误(译者注: java: Generating equals/hashCode with a supercall to java.lang.Object is pointless. )。因为这会使得生成的equalshashCode方法实现只是简单的继承至Object类的方法,只有相同的对象并且相同的hashCode才会判定他们相等。若你的类继承至另一个类又没有设置callSuper, 则会产品一个告警,因为除非超类没有(或者没有跟相等相关的)字段,否则lombok无法为你生成考虑超类声明字段的实现。

    15、XmlAccessorType

    类级别的注解

    定义这个类中何种类型需要映射到XML。

    1. XmlAccessType.FIELD:映射这个类中的所有字段到XML
    2. XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
    3. XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
    4. XmlAccessType.NONE:不映射

    16、@SuppressWarnings

    Suppress  抑制;镇压;废止 Warnings警告 

    @SuppressWarnings("resource")是J2SE 提供的一个批注。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。

    @SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。
    虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。

    三、SpringMVC常用注解

    1、@EnableWebMvc

    在配置类中开启Web MVC的配置支持。

    2、@Controller

    3、@RequestMapping

    用于映射web请求,包括访问路径和参数。

    4、@ResponseBody

    支持将返回值放到response内,而不是一个页面,通常用户返回json数据。

    5、@RequestBody

    允许request的参数在request体中,而不是在直接连接的地址后面。(放在参数前)

    6、@PathVariable

    用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。

    7、@RestController

    该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

    8、@ControllerAdvice

    • 全局异常处理
    • 全局数据绑定
    • 全局数据预处理

    ControllerAdvice的常用场景

    9、@ExceptionHandler

    用于全局处理控制器里的异常。

    10、@InitBinder

    用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。

    11、@ModelAttribute

    (1)@ModelAttribute注释方法 

    如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等。

    (2)@ModelAttribute注释一个方法的参数 

    当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。

    hellorWord方法的userLogin参数的值来源于getUserLogin()方法中的model属性。

    12、@Transactional 

    @Transactional 注解放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息。EmployeeService 的所有方法都支持事务并且是只读。当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。

    @Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
    @Service(value ="employeeService")
    public class EmployeeService

    @Transactional 注解的属性信息

    属性名说明
    name当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
    propagation事务的传播行为,默认值为 REQUIRED。
    isolation事务的隔离度,默认值采用 DEFAULT。
    timeout事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
    read-only指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
    rollback-for用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。
    no-rollback- for

    抛出 no-rollback-for 指定的异常类型,不回滚事务。

     四、其它注解

    1、@JsonIgnore

    (1)作用

    在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

    (2)使用方法

    一般标记在属性或者方法上,返回的json数据即不包含该属性。

    (3)注解失效

    如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false),使用方法一样。

    2、@Schema

    @schema注解标注在class上,表示此类对应的数据库表对应的schema。

    可以用如下语句判断某个实体类上是否带有@schema注解,从而得到schema。

    bean.getClass().isAnnotationPresent(Schema.class)

    五、json常用注解

    1、@JsonIgnoreProperties

    此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

    写法将此标签加在user类的类名上 ,可以多个属性也可以单个属性。

    //生成json时将name和age属性过滤
    @JsonIgnoreProperties({"name"},{"age"})
    public class  user {
    
        private  String name;
        private int age;
    }

    2、@JsonIgnore

    此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

    //生成json 时不生成age 属性
    public class user {
    
        private String name;
        @JsonIgnore
        private int age;
    }

    3、@JsonFormat

    此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如:

    public class User{
        @JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)
        private Date date;
    }

    4、@JsonSerialize

    此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。

    5、@JsonDeserialize

    此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize

    6、@Transient

    如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;

    7、@JsonIgnoreType

    标注在类上,当其他类有该类作为属性时,该属性将被忽略。

    8、@JsonProperty

    @JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},
    而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。

    public class SomeEntity {
        @JsonProperty("user_name")
        private String userName;
    }

    9、只在序列化情况下生效的注解

    @JsonPropertyOrder

    在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。

    @JsonInclude

    在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。

    @JsonInclude(JsonInclude.Include.NON_NULL)

    这个注解放在类头上,返给前端的json里就没有null类型的字段,即实体类与json互转的时候 属性值为null的不参与序列化。
    另外还有很多其它的范围,例如 NON_EMPTY、NON_DEFAULT等

    10、在反序列化情况下生效的注解

    @JsonSetter

    @JsonSetter 标注于 setter 方法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。

    🍅 Java学习路线配套文章:搬砖工逆袭Java架构师

    🍅 基础推荐:Java基础教程系列

    🍅 实战推荐:Spring Boot基础教程

    🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

    🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

    🍅 欢迎点赞 👍 收藏 ⭐留言 📝  

    添加微信,备注1024,赠送Java学习路线思维导图 

    展开全文
  • Spring常用注解你知道有哪些吗?

    千次阅读 2020-04-19 13:23:07
    Spring 常用注解 今天给大家介绍一下 Spring 中的常用注解,同时这些注解也是 Spring 中经常用到的注解,下面我们就一起来看看都有哪些注解吧。 1.@Controller 在控制层使用,标识该类是 Spring MVC controller ...

    Spring 常用注解

    今天给大家介绍一下 Spring 中的常用注解,同时这些注解也是 Spring 中经常用到的注解,下面我们就一起来看看都有哪些注解吧。

    1.@Controller

    在控制层使用,标识该类是 Spring MVC controller 处理器,用来创建处理 http 请求的对象。

    2.@Service

    在业务逻辑层使用,用于标注业务层组件。

    3.@Repository

    在数据访问层使用,用于标注数据访问组件,即 DAO 组件。

    4.@Component

    泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    5.@Autowired

    把配置好的 bean 拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

    6.@Resource

    它的作用相当于 @Autowired 注解的作用。

    7.@Bean

    相当于 XML 中的,放在方法的上面,而不是类,意思是产生一个 Bean,并交给 Spring 的容器管理。

    8.@Configuration

    声明当前类为配置类,相当于 xml 形式的 Spring 配置。

    9.@ComponentScan

    用于对 Component 组件进行扫描。

    10.@Value

    为对应的属性注入值。

    11.@RunWith

    运行器,Spring 中通常用于对 Junit 的支持。

    12.@RequestMapping

    用于映射 Web 请求,包括访问路径和参数。

    13.@ResponseBody

    支持将返回值放在 response 内,而不是一个页面,通常用户返回 json 数据。

    14.@RestController

    用于标注控制层组件,包含 @Controller@ResponseBody

    15.@RequestParam

    用于将请求参数区数据映射到功能处理方法的参数上。

    16.@Scope

    用来配置 Spring Bean 的作用域,它标识 Bean 的作用域。

    17.@Qualifier

    当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注解和 @Autowired 注解通过指定哪一个真正的 bean 将会被装配来消除混乱。

    18.@Transactional

    通过这个注解可以声明事务,可以添加在类上或者方法上。

    19.@Aspect

    声明一个切面(类上)使用 @After@Before@Around 定义通知(advice),可直接将拦截规则(切点)作为参数。

    20.@PointCut

    声明切点,在 java 配置类中使用。

    21.@After

    在方法执行之后执行(方法上)。

    22.@Before

    在方法执行之前执行(方法上)。

    23.@Around

    在方法执行之前与之后执行(方法上)。

    以上就是 Spring 中的一些常用注解,这些使用都是非常频繁的,希望大家掌握!

    展开全文
  • Java面试题系列之Spring常用注解

    千次阅读 2020-04-08 17:03:41
    接下来就给大家列举面试前必须掌握的Spring常用注解。 Java配置类相关注解 @Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上); @Bean 注解在方法上,声明当前方法的返回值...
  • 浅谈spring 常用注解

    2020-08-28 21:01:32
    主要介绍了浅谈spring 常用注解,具有一定参考价值,需要的朋友可以了解下。
  • (本人常用) pring MVC和REST注解 @Controller (这就不用多说了吧 天天用) 此注解使用在class上声明此类是一个Spring controller,是@Component注解的一种具体形式。 @RequestMapping 此注解可以用在class和...
  • 最全Spring常用注解详解

    千次阅读 多人点赞 2018-12-12 16:06:26
    研究顺序,从最常用的来,follow me 1.@Controller注解 用于标注控制层组件(如struts中的action)。如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@...
  • Spring常用注解.xmind

    2020-11-30 16:46:21
    Spring 常用注解整理,分类:创建对象;注入数据;范围;全局异常;生命周期;新注解;JPA;扩展原理等注解类型。
  • Spring常用注解汇总

    2020-09-04 07:10:17
    主要介绍了Spring常用注解汇总,需要的朋友可以参考下
  • 这篇文章主要介绍了Spring当中的常见的一些注解,以及注解的简单用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 @Configuration 作用:指定当前类是一个配置类,也...
  • Spring部分 1、声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明(C) 2、注入bean的注解 ...
  • spring常用注解的作用

    千次阅读 2018-09-25 14:42:58
    一.注解: 注解分为两类,一种是使用bean的(@Autowired , @Resource),一种是注册bean的(@Component ...@Bean 标识一个用于配置和初始化一个由SpringIoc容器管理的新对象的方法,类似于XML配置文件的&lt;bea...
  • Spring常用注解(收藏大全).docx
  • Spring常用注解的用法和作用理解

    千次阅读 2017-03-07 16:15:14
    标注@Controller、@Service、@Repository、@Autowired、@Resource、@Component、@Qualifier在Spring中的作用和用法理解在使用spring的时候这些标注都是必不可少的会用到。今天就总结一下它们各自的作用以及用法。一...
  • Spring常用注解,注解 IOC ,AOP,MVC 的理解

    千次阅读 多人点赞 2021-10-18 22:00:10
    文章目录0、Spring常用注解1、IOC1.1、IOC简介1.2、 IOC的主要实现方式依赖查找依赖注入1.2.1、 IoC容器1.2.2 、依赖注入@Autowired与@Resource区别2、 AOP2.1、AOP简单理解2.2、 AOP涉及名词 0、Spring常用注解 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,527
精华内容 44,210
关键字:

spring常用注解

spring 订阅