annotation(注解)(可见Spring_pref,3.11)
加入annotation,需要在beans.xml的<beans>标签加属性xmlns:context="http://www.springframework.org/schema/context",并在<beans>标签辖内加标签<context:annotation-config />。前者是新增的xml的命名空间,后者表示该xml文件的bean有参与注解的。前者属性中,冒号前表示xml命名空间,冒号后表示该xml中标签可携带的前缀。无冒号即默认的命名空间,有冒号为带有某前缀的标签对应的命名空间。
可以通过设置编辑器的XML-catalog来增加前者定义的名字字典,方便编辑时自动补全。
.xsd文件为元数据文件,是新型的.dtd文件,两者是xml的语法文件,又被称为schema。定义于xml文件的头。schema location使用域名作为.xsd文件的key,确保每个文件的key独一无二。
如果接触不到源码,就只能使用xml完成注入,而无法运用annotation。
@Autowired注解,用于setter函数上方(.Java)中。
有Annotation情况下,如果有某bean对应的实现需要注入,比如类中setter注入,<bean>下本来需要写<property>,可以通过在.java中的setter函数前加@Autowired注解,则.xml中的<bean>里不写property也可以完成动态装配。
Autowired默认自动装配为byType。如果beans.xml中有多个相同class的bean,byType的自动装配会报错,则需要在setter的参数前加@Qualifier("value"),value为qualifier value,应定义于bean中,默认可以用bean ID代替,用于指定装配哪个bean。(不常用)
@Required注解,用于setter函数上方(.java中)。
要求setter的目标对象必须被注入,否则报错。
@Resource注解,用于setter函数上方(.java中),指定所用的bean,默认byName,名称找不到就byType。(推荐使用)
@Resource(name = "u"),用于指定注入的bean名。
@Component注解,使用后可代替<bean>标签。
在某类上方使用@Component,意味着该类成为一个组件,可作为Spring容器的注入元素。使用需要在beans.xml中写<context:component-scan base-package="value"/>,value为具体存有bean的包名称(可以是整个项目的文件夹名称com.example);在具体实现类的类名上注解@Component,表示该类产生的对象可作为component(组件);在使用该component的类上方写@resource注解。标记为component的类均可以直接被getbean函数取到。
实际操作中,JVM由于component-scan,会扫描包中带有@Component注解的类,生成对象作为备选component,该对象名为标准起名法名称(如userDAOImpl,类名首字母小写)。
可以通过@Component("value")或@Component(value="value")的方法为自己起名,value为对象(组件)名称。规范开发要求指定Component的对象名,方便注入使用。
@Resource(name="value")可以用于指定用哪个对象作为resource(资源),value为对象名。
@Component,@Repository,@Service,@Controller这四类注解为Spring默认组件注解。可以在component-scan中设置filter过滤扫描类型。(参pref_3.12)
@Scope("value"),用于组件注解(如@Component)的上方,指定该组件的类型。value为singleton时该组件为单例;为prototype时每次重新新建。
@PostConstruct,@PreDestroy,用于类实现(.java)中,函数上方。前者指定某函数在对象构造后运行,后者指定某函数在对象析构前运行。即xml中的init和destroy。
一般来说,有源码时直接写Annotation开发效率高;没有源码时可以改.xml文件。