使用注解需要修改bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/><bean class="example.SimpleMovieCatalog"><qualifier value="main"/><!-- inject any dependencies required by this bean --></bean><bean class="example.SimpleMovieCatalog"><qualifier value="action"/><!-- inject any dependencies required by this bean --></bean><bean id="movieRecommender" class="example.MovieRecommender"/></beans>

黄色部分内容会使spring加载AutowiredAnnotationBeanPostProcessor等可以识别注解的bean。

@AutoWire,自动注入,一般放在属性的set方法上,会为该属性自动注入。默认的注入是使用byType,就是根据xml中bean的类型去匹配。

可以和@Qualifier匹配使用。

注解实现方式:

package com.bjsxt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

public class UserService {
   
    private UserDAO userDAO; 
   
    public void init() {
        System.out.println("init");
    }
   
    public void add(User user) {
        userDAO.save(user);
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
   
    @Autowired
    public void setUserDAO(@Qualifier("u") UserDAO userDAO) {//Qualifier:根据qualifier标签去查找,也可以根据name或者id去查找匹配的bean
        this.userDAO = userDAO;
    }

public void destroy() {
        System.out.println("destroy");
    }
}

对应的xml实现方式:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"             >

<bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">       <property name="daoId" value="1"></property>      </bean>        <bean name="userDAO2" class="com.bjsxt.dao.impl.UserDAOImpl">          <property name="daoId" value="2"></property>      </bean>         <bean id="userService" class="com.bjsxt.service.UserService" scope="prototype" autowire="byType"><!-- 也可以设在beans标签上,好像是default-autowire scope="prototype"表示每次都创建一个新的实例对应的有singleton--只有一个实例 -->     </bean>

</beans>

@Resource

此标签也用于注入属性。相对来说用的比较多。

该标签需要导入J2EE的JAR包:common-annotations.jar

javax.annotation.Resource,默认byName,如果找不到对应name会去找对应type

@Resource
    public void setUserDAO(UserDAO userDAO) { 
        this.userDAO = userDAO;
    }

@Resource(name=”uuu”) //可以byName

以上两种注解虽然可以在代码中设置注入,但是还要求在xml文件中配置bean。

Component可以省去。

5.10.3 Using filters to customize scanning

By default, classes annotated with @Component, @Repository, @Service, @Controller, or a custom annotation that itself is annotated with @Component are the only detected candidate components. However, you can modify and extend this behavior simply by applying custom filters. Add them as include-filter or exclude-filter sub-elements of thecomponent-scan element. Each filter element requires the type and expression attributes. The following table describes the filtering options.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config />
    <context:component-scan base-package="com.bjsxt"/>

</beans>

scan:扫描。表示扫描某个包和其自包,将能作为组件(添加了@Component)的内容解析出来。

package com.bjsxt.dao.impl;

import org.springframework.stereotype.Component;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

@Component("u") //这样写表示这个类是一个组件,在另外一个类看来它就是一个资源。不指定它的key默认会是userDAOImpl(即类名首字母改成小写)

public class UserDAOImpl implements UserDAO {

public void save(User user) {
        //Hibernate
        //JDBC
        //XML
        //NetWork
        System.out.println("user saved!");
    }

}

package com.bjsxt.service;
import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

@Component("userService")
public class UserService {
   
    private UserDAO userDAO; 
   
    public void init() {
        System.out.println("init");
    }
   
    public void add(User user) {
        userDAO.save(user);
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
   
    @Resource(name="u")
    public void setUserDAO( UserDAO userDAO) {
        this.userDAO = userDAO;
    }

public void destroy() {
        System.out.println("destroy");
    }
}

额外的一些内容:

<bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="prototype">

scope对应的注解是@Scope(“”)

init-method对应的注解是@PostConstruct,表示构造完成之后再执行它注解的方法。

destroy-method对应的注解是@PreDestroy,容器销毁之前。

Spring 常用注入注解(annotation)和其对应xml标签相关推荐

  1. 2.3.2 spring属性注入-注解注入-半注解注入-后序

    代码: spring属性注入-注解注入-半注解后序.zip - 蓝奏云文件大小:15.2 K|https://www.lanzouw.com/iCjbVvpvxaf 上一个博客的半注解是,一个类在xm ...

  2. spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志

    spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...

  3. Spring框架注入注解与拦截器浅谈

    依赖注入注解 1实现注入的注解: (1)修饰属性.方法.构造函数 @Autowire:自动注入,自动去spring容器中寻找指定的bean来注入,require属性指定注入这个bean是否是必须的,如 ...

  4. 2.3.3 spring属性注入-注解注入-全注解-配置类扫描

    代码: spring2-属性注入-全注解-配置类扫描.zip - 蓝奏云文件大小:12.3 K|https://www.lanzouw.com/iPK5vvq21uf 这个博客,我们使用全注解的方式来 ...

  5. 2.3.1 spring属性注入-注解注入-半注解方式-前序

    注解注入自由度高,可以对部分类使用注解,也可以对所有类都使用注解. 下面代码是的Category使用xml定义java Bean, Product使用注解来定义java Bean 1.定义Catogo ...

  6. Spring框架----Spring常用IOC注解的分类

    学习基于注解的IOC配置,我们应该知道,注解配置和xml配置要实现的功能都是一样的,都是要降低程序的耦合,只是配置的形式不一样, 关于实际的开发中到底是使用xml还是注解,每家公司有着不同的使用习惯, ...

  7. spring学习--完全注解开发(不需要xml)

    主类正常编写,略 配置类新 @Configuration //作为配置类,替代 xml 配置文件 //写明扫描的类的目录(共同的上级目录也可以) @ComponentScan(basePackages ...

  8. Spring依赖注入:注解注入总结

    更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.C ...

  9. Spring 用注解Annotation注入 abstract 抽象父类的属性

    问题: 希望把子类公共的属性放在抽象类中.运行时,希望在Spring 扫描@Component注解,自动加载子类的同时,自动注入抽象父类的属性. 抽象父类: @Component public abs ...

最新文章

  1. 目标检测之线段检测---lsd line segment detector
  2. 大班音乐机器人反思_大班音乐教案:机器人教案及教学反思
  3. matlab在activex中读取视频,[转载]matlab读取excel数据并显示在excel(activex控件)中
  4. SSLOJ 1336.膜拜神牛
  5. 成功最快的就是改变你这个思维,拥有这个全新的思维
  6. python3.6安装步骤-详解win7下python3.6安装配置方法步骤
  7. centos7修改ip(centos7修改时区)
  8. R语言单因素、多因素方差分析ANOVA analysis of variance
  9. 开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)
  10. 区域生长算法原理及实现
  11. MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式
  12. 设计模式-外观模式(家庭影院你值得拥有)
  13. 【算法】牛和牛栏如何匹配到最大值
  14. mysql中floor的用法_Mysql报错注入之floor报错详解
  15. 阿里云服务器ECS与传统服务器有哪些区别?
  16. 互联网和大数据是什么意思_数据化和互联网行业 互联网大数据什么意思
  17. 短信验证码接收不到原因和解决方案分析
  18. cube escape语言设置_Cube Escape Harvey's Box攻略
  19. 头条二面智力题!难受!
  20. 程序员想获得一份高薪工作,得从这4个方面入手

热门文章

  1. 最近配置IBM设备遇到的问题总结
  2. pandas - DataFrame
  3. 一个想法不一定对 系列
  4. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
  5. 只读变量(常量)和位置变量
  6. 跨站脚本攻击(selfxss)笔记(三)
  7. abap 一些小知识点的总结
  8. 解字符串不能超过8000的方法及交叉表的处理
  9. CG-CTF-Web-GBK Injection
  10. Mac OS 怎么设置host