Spring 经常使用注解的使用

咱们都知道而且会使用Spring提供的依赖注入功能,只要在Spring的容器中使用<bean>标签,指定了id和class的属性,spring就会在咱们须要使用的使用自动的注入进程序里面,固然这个自动注入的功能依赖了注解这个功能,不然咱们须要本身去容器中经过如下方式去手动取java

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

Spring经常使用的标签

1. @Autowiredweb

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

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

虽然写了@Autowired可是仍是想经过名字匹配,能够加上@Qualifier标签mvc

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

2. @Resourceapp

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

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

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

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

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

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

相关文章
相关标签/搜索