操作步骤

第一步:导入相关jar包

spring IoC的基本包

Spring支持注解的Jar包

第二步:创建Spring配置文件,ApplicationContext.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描
到包里面扫描类、方法、属性上面是否有注解
-->
<context:component-scan base-package="cn.hao"></context:component-scan> </beans>

第三步:使用注解方式实现bean管理

DAO层:

package cn.hao.dao;

import org.springframework.stereotype.Repository;

// 注解方式创建bean
@Repository
public class UserDAO { public void doAdd() {
System.out.println("add......");
}
}

Service层:

package cn.hao.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.hao.dao.UserDAO;

// 注解方式创建bean
@Service
public class UserService { // 依赖注入
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

测试类:

package cn.hao.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.hao.service.UserService; public class Test { public static void main(String[] args) { // 加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取容器中的bean
UserService userService = (UserService) context.getBean("userService");
userService.add();
}
}

创建Bean的的四种注解方式

1、@Component:标注一个普通的Spring Bean 类

2、@Controller:标注一个控制器组件类

3、@Service:标注一个业务逻辑组件类

4、@Repository:标注一个DAO组件类

// 指定该类作为Spring Bean,Bean的实例名为service
@Service("service")
public class UserService {
//......
}

若创建的Bean实例的名称没指定,默认是Bean类的首字母小写,其他部分不变。

// 指定该类作为Spring Bean,Bean的实例名默认为userService
@Service
public class UserService {
//......
}

指定Bean的作用域的二种注解方式

1、@Scope("singleton"):单例,不写默认就是这种方式

2、@Scope("prototype"):多例

@Service
@Scope("singleton")
public class UserService { // 依赖注入
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

Bean中依赖注入的两种方式

1、@Resource

2、@Autowired

@Resource方式注入默认是按名称装配,即一旦设置了name属性,则严格按照名称进行查找装配,若没有对应的Bean,则装配失败。

@Service
public class UserService { // 在Spring容器中找到名称为userDAO的Bean实例注入
@Resource(name="userDAO")
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

注:如果没有指定name属性,默认的名称和注入的对象名称一样。若仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

@Service
public class UserService { // 没有给出name属性,默认名称与要注入的属性名称一样,即userDAO
@Resource
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

@Autowired 默认按类型装配(byType), 例如,@Autowired标注了private UserDAO userDAO,则Spring会自动搜索容器中类型为UserDAO的Bean进行注入。

@Service
public class UserService { // 在容器中搜索类型是UserDAO的实例对象装配
@Autowired
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

但是按类型装配有个很大的缺陷是,如果容器中有不止一个UserDAO类型的实例,则无法正确装配,会抛出异常。可以配合@Qualifier注解,实现按名称装配的效果。

@Service
public class UserService { // 两者结合实现按名称装配的效果
@Autowired
@Qualifier("userDAO")
private UserDAO userDAO; public void add() {
this.userDAO.doAdd();
}
}

Spring中基于注解方式管理bean的更多相关文章

  1. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

  2. Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource 编辑 ​ Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...

  3. spring中基于注解使用ehcache

    继续上篇,这篇介绍服务层缓存,基于注解的方式使用ehcache 注解的标签主要有4个:@Cacheable.@CacheEvict.@CachePut.@Caching,他们的用法是: @Cachea ...

  4. Spring中基于注解的IOC(一):基础介绍

    1. Spring中的常用注解 注解配置和xml配置要实现的功能都是一样的,都要降低程序的耦合,只是配置的形式不一样 xml中配置示例: 注解分类: 1.用于创建对象的注解 它们的作用就和在xml中编 ...

  5. spring之通过注解方式配置Bean(一)

    (1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...

  6. spring中基于注解使用AOP

    本文内容:spring中如何使用注解实现面向切面编程,以及如何使用自定义注解. 一个场景 比如用户登录,每个请求发起之前都会判断用户是否登录,如果每个请求都去判断一次,那就重复地做了很多事情,只要是有 ...

  7. Spring中基于注解的IOC(二):案例与总结

    2.Spring的IOC案例 创建maven项目 导入依赖 pom.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

  8. Spring使用ioc注解方式配置bean

    context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...

  9. Spring中的注解配置-注入bean

    在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...

随机推荐

  1. python实现直方图的应用

    目录: (一)调节图片对比度(均衡化) (1)全局直方图均衡化------equalizeHist (2)自适应的局部的直方图均衡化------createCLAHE (二)图片的相似度比较 (三)直 ...

  2. PAT A1063——set的常见用法详解

    set 常用函数实例 set是一个内部自动有序且不含重复元素的容器 (1)insert() (2)find()  st.find(*it) 找到返回其迭代器,否者返回st.end() (3)size( ...

  3. [bzoj1032]祖码

    先将连续的一段相同的点连起来,然后考虑对于一段区间,分两种情况:1.首尾两点再同时消掉,必然要先将去掉首尾的一段消掉后再消2.首尾两点再不同时刻消掉,那么必然存在一个断点k,使得k左右无关(题目中的错 ...

  4. Go语言核心36讲(Go语言实战与应用十一)--学习笔记

    33 | 临时对象池sync.Pool 到目前为止,我们已经一起学习了 Go 语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁.读写锁.条件变量和原子操作,以及 Go 语言特有的几个同步工具 ...

  5. CSS Web Fonts 网络字体

    Fonts 1. CSS font-family 在 CSS 中,可以使用 font-family 属性来指定字体,浏览器渲染文字时候会根据这个属性应用于元素.如果没有指定这个属性或者指定的字体不存在 ...

  6. c语言实参与形参的区别

    1 #include<stdio.h> 2 #include<math.h> 3 4 /** 5 * 形参和实参的功能是作数据传送. 6 * 函数调用中发生的数据传送是单向的. ...

  7. mGWAS研究思路

    mGWAS(metabolome-based genome-wide association studies)的研究方法和GWAS类似,只是将代谢物含量作为表型性状来与基因位点进行关联.但同时它也有自 ...

  8. C语言 自定义函数按行读入文件2

    再改进下上次的读入一行函数,利用zlib库的gzgtec函数读取文件,动态分配内存,最后没有多出空行. 1 #include <stdio.h> 2 #include <stdlib ...

  9. Linux—find在指定路径下查找文件或目录

    find /指定路径  -name  "*filename*" find /指定路径  -name  "*filename*"  2>/dev/null  ...

  10. Excel-统一小括号格式(中文小括号,英文小括号)

    1.统一小括号格式(中文小括号,英文小括号) 公式=ASC("(") #"(" 解释函数: ASC(A1)#对于双字节字符集(DBCS)语言,将全角英文字符(即 ...