咱们都知道而且会使用Spring提供的依赖注入功能,只要在Spring的容器中使用<bean>标签,指定了id和class的属性,spring就会在咱们须要使用的使用自动的注入进程序里面,固然这个自动注入的功能依赖了注解这个功能,不然咱们须要本身去容器中经过如下方式去手动取java
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); OBJ obj=(BOJ) ctx.getBean("id");
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")
<web-app> ... <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> ... </web-app>
@scope("session")
session做用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
<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"/>
@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异步方法调用