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

原文地址:https://www.cnblogs.com/liqing-weikeyuan/p/8489941.html