基于注解装配

Spring 中常用的注解如下。

    1)@Component

    可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。
       为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
        @Controller:web层
        @Service:service层
        @Repository:dao层
        写上这些注解,就相当于将这个类交给Spring管理装配了! 

    2)@Repository

    用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

    3)@Service

    通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

    4)@Controller

    通常作用在控制层(如 Struts2 的 Action、SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与     @Component 相同。

    5)@Autowired

        可以应用到 Bean 的属性变量、属性的 setter 方法、非 setter 方法及构造函数等,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。

    6)@Resource

        作用与 Autowired 相同,区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配。
        @Resource 中有两个重要属性:name 和 type。
    Spring 将 name 属性解析为 Bean 的实例名称,type 属性解析为 Bean 的实例类型。如果指定 name 属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。

    7)@Qualifier

    与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。

代码示例:

Dao层:

package com.openlab.Dao;

public interface stuDao {
   public void  out();
}
DaoImpl层
package com.openlab.Dao.Impl;

import com.openlab.Dao.stuDao;
import org.springframework.stereotype.Repository;

@Repository("stuDao")
public class StuImpl implements stuDao {


    @Override
    public void out() {
        System.out.println("add方法=====");
    }
}

Service

package com.openlab.Service;


public interface StuService {
    public void out();
}

Service实现类

import javax.annotation.Resource;

@Service("stuservice")
public class StuServiceImpl implements StuService{
    @Resource(name="stuDao")
    private stuDao stuDao;

    public stuDao getStuDao() {
        return stuDao;
    }

    public void setStuDao(stuDao stuDao) {
        this.stuDao = stuDao;
    }

    @Override
    public void out() {
        stuDao.out();
        System.out.println("service方法执行--------");
    }
}

Controller层

package com.openlab.Controller;

import com.openlab.Service.StuService;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

@Controller("StuController")
public class StuController {
    @Resource(name="stuservice")
    private StuService stuservice;

    public StuService getStuservice() {
        return stuservice;
    }

    public void setStuservice(StuService stuservice) {
        this.stuservice = stuservice;
    }

    public void out() {
        stuservice.out();
        System.out.println("方法=====");
    }
}

测试:

 结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值