Spring常用注解汇总Word文档下载推荐.docx
《Spring常用注解汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Spring常用注解汇总Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
![Spring常用注解汇总Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/1/f59af49a-0633-4d0c-9bc5-c428bd375181/f59af49a-0633-4d0c-9bc5-c428bd3751811.gif)
}
再定义一个猴子:
publicclassMonkey{
privateStringmonkeyName="
MonkeyKing"
MonkeyName:
+monkeyName;
定义一个动物园:
publicclassZoo{
privateTigertiger;
privateMonkeymonkey;
publicTigergetTiger(){
returntiger;
publicvoidsetTiger(Tigertiger){
this.tiger=tiger;
publicMonkeygetMonkey(){
returnmonkey;
publicvoidsetMonkey(Monkeymonkey){
this.monkey=monkey;
returntiger+"
\n"
+monkey;
spring的配置文件这么写:
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
beans
xmlns="
http:
//www.springframework.org/schema/beans"
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
p="
//www.springframework.org/schema/p"
context="
//www.springframework.org/schema/context"
xsi:
schemaLocation="
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans-3.0.xsd
//www.springframework.org/schema/context
//www.springframework.org/schema/context/spring-context-3.0.xsd
"
<
beanid="
zoo"
class="
com.spring.model.Zoo"
>
propertyname="
tiger"
ref="
/>
monkey"
/bean>
com.spring.model.Tiger"
com.spring.model.Monkey"
/beans>
测试方法:
publicclassTestAnnotation{
/**
*不使用注解
*/
@Test
publicvoidtest(){
//读取配置文件
ApplicationContextctx=newClassPathXmlApplicationContext("
applicationContext2.xml"
);
Zoozoo=(Zoo)ctx.getBean("
System.out.println(zoo.toString());
都很熟悉,权当复习一遍了。
1、@Autowired
@Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。
当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。
@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。
因此,引入@Autowired注解,先看一下spring配置文件怎么写:
beansxmlns="
//www.springframework.org/schema/beanshttp:
//www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp:
//www.springframework.org/schema/contexthttp:
//www.springframework.org/schema/context/spring-context-3.0.xsd"
context:
component-scanbase-package="
com.spring"
注意第13行,使用必须告诉spring一下我要使用注解了,告诉的方式有很多,<
xxx"
是一种最简单的,spring会自动扫描xxx路径下的注解。
看到第15行,原来zoo里面应当注入两个属性tiger、monkey,现在不需要注入了。
再看下,Zoo.java也很方便,把getter/setter都可以去掉:
importorg.springframework.beans.factory.annotation.Autowired;
@Autowired
}
这里@Autowired注解的意思就是,当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。
有一个细节性的问题是,假如bean里面有两个property,Zoo.java里面又去掉了属性的getter/setter并使用@Autowired注解标注这两个属性那会怎么样?
答案是Spring会按照xml优先的原则去Zoo.java中寻找这两个属性的getter/setter,导致的结果就是初始化bean报错。
OK,假设此时我把.xml文件的16行、17行两行给去掉,再运行,会抛出异常:
org.springframework.beans.factory.BeanCreationException:
Errorcreatingbeanwithname'
zoo'
:
Injectionofautowireddependenciesfailed;
nestedexceptionisorg.springframework.beans.factory.BeanCreationException:
Couldnotautowirefield:
privatecom.spring.model.Tigercom.spring.model.Zoo.tiger;
nestedexceptionisorg.springframework.beans.factory.NoSuchBeanDefinitionException:
Nomatchingbeanoftype[com.spring.model.Tiger]foundfordependency:
expectedatleast1beanwhichqualifiesasautowirecandidateforthisdependency.Dependencyannotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
atorg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:
285)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
1074)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
517)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
456)
atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:
291)
atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
288)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
190)
atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:
580)
atorg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:
895)
atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
425)
atorg.springframework.context.support.ClassPathXmlApplicationContext.<
init>
(ClassPathXmlApplicationContext.java:
139)
83)
atcom.spring.test.TestAnnotation.test(TestAnnotation.java:
16)
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
atjava.lang.reflect.Method.invoke(Method.java:
597)
atorg.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:
45)
atorg.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:
15)
atorg.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:
42)
atorg.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:
20)
atorg.junit.runners.ParentRunner.runLeaf(ParentRunner.java:
263)
atorg.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
68)
47)
atorg.junit.runners.ParentRunner$3.run(ParentRunner.java:
231)
atorg.junit.runners.ParentRunner$1.schedule(ParentRunner.java:
60)
atorg.junit.runners.ParentRunner.runChildren(ParentRunner.java:
229)
atorg.junit.runners.ParentRunner.access$000(ParentRunner.java:
50)
atorg.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:
atorg.junit.runners.ParentRunner.run(ParentRunner.java:
300)
atorg.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
atorg.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
673)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)
Causedby:
org.springframework.beans.factory.BeanCreationException:
atorg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:
502)
atorg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:
84)
282)
...36more
org.springframework.beans.factory.NoSuchBeanDefinitionException:
atorg.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:
920)
atorg.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:
789)
atorg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:
703)
474)
...38more
因为,@Autowired