操作步骤

第一步:导入相关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();
}
}

最新文章

  1. Java面试题问与答——编译时与运行时
  2. 使用XML定制Ribbon的一点小前奏(稍微再进一步的理解XML)
  3. Bubble Sort
  4. C++11变长参数模板
  5. 七、Android学习笔记_JNI hello world
  6. Yii PHP 框架分析(四)
  7. BOM、DOM学习笔记——JavaScript
  8. 编程内功修炼之数据结构—BTree(一)
  9. Ubunu下安装mongoDB
  10. linux 经常使用配置
  11. 使用 JMeter 进行压力测试
  12. SharePoint Framework 在web部件中使用第三方样式 - 将第三方样式打到包中
  13. POJ--1056 IMMEDIATE DECODABILITY &amp;&amp; POJ--3630 Phone List(字典树)
  14. sqli-labs Less-11 and Less-12
  15. oracle case when 用法
  16. python 中 try ...except
  17. 在Ubuntu 16.04 上编译安装OpenCV3.2.0(Cmake + python3 + OpenCV3)(转)
  18. gm(GraphicsMagick)图片中文水印乱码问题
  19. 网页导出excel文件
  20. sql2012增加Sequence对象

热门文章

  1. centos7系列的网络yum源配置
  2. [luogu5464]缩小社交圈
  3. [atAGC046E]Permutation Cover
  4. 【Java面试题】-- Java基本类型
  5. 第三方登陆-qq互联
  6. jmeter链接数据库,信息全部填写正确,运行之后没有结果
  7. Ubuntu 18.04.5 LTS Ceph集群之 cephx 认证及使用普通用户挂载RBD和CephFS
  8. Arc123 D
  9. 洛谷 P5540 - [BalkanOI2011] timeismoney | 最小乘积生成树(最小生成树)
  10. FVCOM泥沙模块河流边界处理