zoukankan      html  css  js  c++  java
  • Spring 常用注解的使用

    我们都知道并且会使用Spring提供的依赖注入功能,只要在Spring的容器中使用<bean>标签,指定了id和class的属性,spring就会在我们需要使用的使用自动的注入进程序里面,当然这个自动注入的功能依赖了注解这个功能,否则我们需要自己去容器中通过以下方式去手动取

    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    OBJ obj=(BOJ) ctx.getBean("id");

    Spring常用的标签

    1. @Autowired

    顾名思义,自动装配,策略是根据类型进行匹配,要去符合要求的类型只有一个(多个报错),因为根据类型就不需要根据名字,get/set方法就用不到,可以根据个人需求选择删除或者保留。也不用使用<bean>的property属性。值得注意的是如果同时配置了property和@Autowired,那么配置文件的优先级要比注解的高,所以不要把get/set方法忘记了。

    @Autowired注解是有属性的,request属性表示该对象是否是必须的,如果写作@Autowired(request=false)就表示该对象不是必须的,Spring找不到就返回null。

    虽然写了@Autowired但是还是想通过名字匹配,可以加上@Qualifier标签

    @Autowired() @Qualifier("baseDao")    
    private BaseDao baseDao;

    2. @Resource

    public class Zoo {
        
        @Resource(name="tiger")
        private Tiger tiger;
        
        @Resource(type=Monkey.class)
        private Monkey monkey;
        
        public String toString(){
            return tiger + "
    " + monkey;
        }
    }
    

    @Resource的策略有点复杂主要包括以下几种

    (1)、@Resource没有设置属性,那么其策略是先根据name去匹配bean,当注解写在字段上时,name默认取字段名。

    (2)、指定了name或者type属性,则根据指定的去匹配。

    (3)、指定了name和type属性,两个必须都要满足,任何一个出错都报错。

    (4)、@Resource是J2EE的注解,而不是Spring

    3. @Service

    和@Controller、@Repository、@Component都相似,用来区别不同的mvc层,都能被Spring扫描到,一般写在类上面,用来标注类。

    @Service的作用

    (1)、将被修饰的类申明为bean,

    (2)、修饰的类在bean中的id是类名的小写

    若想自己指定名字可以写作@Service("xxx")

    3. @Scope

    属性值有prototype、request、session、global session等

    @scope默认是单例模式(singleton)

    @scope("prototype")

      表示每次获取Bean的时候会有一个新的实例

    @scope("request")

      表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:
      request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:
    <web-app>
       ...
      <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
      </listener>
       ...
    </web-app>
    

    @scope("session")

      session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

    使用注解来构造IOC容器

    <context:component-scan>在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean。

    如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。

    如:在base-package指明一个包

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

    表明cn.gacl.java包及其子包中,如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。也可以在<context:component-scan base-package=” ”/>中指定多个包,如:

    <context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>
    

    使用Spring常用注解汇总 

    @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异步方法调用

  • 相关阅读:
    HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
    FJNU2018低程F jq解救fuls (贪心乱搞)题解
    Gym 101775J Straight Master(差分数组)题解
    FJUT3591 侦测到在途的聚变打击(最小不可相交路径覆盖)题解
    HDU 6406 Taotao Picks Apples & FJUT3592 做完其他题后才能做的题(线段树)题解
    vijos 1907 飞扬的小鸟
    vijos 1779 国王游戏
    BZOJ 3439 Kpm的MC密码
    BZOJ 3163 Eden的新背包问题
    codevs 5429 完全背包
  • 原文地址:https://www.cnblogs.com/liqing-weikeyuan/p/8489941.html
Copyright © 2011-2022 走看看