--------------------siwuxie095

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

基于注解的方式管理 Bean

 
 

 
 

(一)准备

 
 

 
 

1、注解,可以理解为代码中的特殊标记,使用注解可以帮助完成功能

 
 

 
 

 
 

2、注解写法:@注解名称(属性名称="属性值")

 
 

 
 

 
 

3、注解可以使用在类上面、方法上面、属性上面

 
 

 
 

 
 

4、注解可以替代配置文件来管理
Bean,但不可能完全脱离配置

文件,仍然需要在配置文件中做少许配置

 
 

 
 

 
 

5、创建
Spring 配置文件,并引入 XML 约束

 
 

spring-beans-4.3.xsd

spring-context-4.3.xsd

 
 

注意:要引入和
Spring 版本对应的 XML 约束

 
 

 
 


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">

 
 

 
 

 
 

6、在配置文件中开启注解扫描

 
 

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">

 
 

<!--

Spring 注解开发除了要引入约束:

 

http://www.springframework.org/schema/beans/spring-beans.xsd

 

还要引入新的约束:

 

http://www.springframework.org/schema/context/spring-context.xsd

-->

 
 

 
 

<!--

开启注解扫描:到包中扫描类、方法、属性上面是否有注解

 

base-package 属性:表示要扫描的包。如果有多个,以逗号隔开,


缩短包路径,写成 com.siwuxie095,甚至写成 com

-->

<context:component-scan
base-package="com.siwuxie095.anno"></context:component-scan>

 

 

<!--

只扫描属性上面是否有注解

 

<context:annotation-config></context:annotation-config>

-->

 

 
 

</beans>

 
 

 
 

 
 

 
 

 
 

 
 

 
 

(二)注解创建对象

 
 

 
 

1、在要创建对象的类上面,使用注解即可实现

 
 

 
 

 
 

2、创建对象的注解一共有四个,且都作用在类上:

 
 

(1)@Component

 
 

(2)@Controller

 
 

(3)@Service

 
 

(4)@Repository

 
 

「目前这四个注解功能是一样的,都用来创建对象」

 
 

 
 

 
 

 
 

3、在类上加上
@Scope 注解,设置创建的对象是单实例还是多实例

 
 

(1)singleton:默认值,单实例

 
 

(2)prototype:多实例

 
 

 
 

 
 

4、具体实现

 
 

(1)编写一个普通类

 
 

User.java:

 
 

package com.siwuxie095.anno;

 
 

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

 
 

/**

* 用注解的方式创建对象:@Component(value="user")

*

* 也可简写为 @Component("user"),即 value 省略不写

*

*

* 类似于配置文件中的:<bean id="user" class="com.siwuxie095.anno.User"></bean>

*

*/

@Component(value="user")

@Scope(value="singleton")

public class User {

 

public
void add() {

System.out.println("----- add -----");

}

 

}

 
 

 
 

 
 

(2)编写一个测试类

 
 

TestAnno.java:

 
 

package com.siwuxie095.anno;

 
 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 
 

public class TestAnno {

 

/**

* 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包)

*

* 选中方法名,右键->Run As->JUint Test

*/

@Test

public
void testUser() {

 

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

 

User user=(User) context.getBean("user");

 

user.add();

}

 

}

 
 

 
 

 
 

 
 

 
 

 
 

 
 

(三)注解注入属性

 
 

 
 

1、应用场景:在
Service 类中得到 Dao 类的对象

 
 

 
 

 
 

2、属性注入的注解:

 
 

(1)@Autowired:默认按类型进行装配注入

 
 

如果想要按名称进行装配注入,需要结合
@Qualifier 注解进行使用

 
 

 
 

(2)@Resource:默认按名称进行装配注入

 
 

 
 

「使用注解注入属性,可以不提供属性的
set 方法」

 
 

 
 

 
 

4、@Autowired 和 @Resource 可作用在属性和属性的 set 方法上

 
 

 
 

 
 

5、建议:

 
 

@Autowired 由 Spring 提供,@Resource 由 J2EE 提供

 
 

为减少对
Spring 的依赖,建议使用 @Resource

 
 

 
 

 
 

6、具体实现

 
 

(1)编写一个
Dao 类

 
 

Dao.java:

 
 

package com.siwuxie095.anno;

 
 

import org.springframework.stereotype.Component;

 
 

/**

* 用注解的方式创建对象:@Component(value="dao")

*

* 也可简写为 @Component("dao"),即 value 省略不写

*/

@Component(value="dao")

public class Dao {

 
 

public
void add() {

System.out.println("----- Dao -----");

}

 

}

 
 

 
 

 
 

(2)编写一个
Service 类

 
 

Service.java:

 
 

package com.siwuxie095.anno;

 
 

import javax.annotation.Resource;

 
 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.stereotype.Component;

 
 

/**

* 用注解的方式创建对象:@Component(value="service")

*

* 也可简写为 @Component("service"),即 value 省略不写

*/

@Component(value="service")

public class Service {

 

/*

* 注意:(1)=(2)=(3),三者可相互替换

*/

 

 

/* (1)

*

* @Autowired 默认按类型进行装配注入

*

* 使用注解注入属性,可以不提供属性的 set 方法

*/

@Autowired

private Dao dao;

 

 

/* (2)

*

* @Autowired 和 @Qualifier(value="dao") 结合使用,

* 即
按名称进行装配注入(可写在同一行,也可写在两行)

*

* value 可以省略不写,即 @Qualifier("dao")

*/

// @Autowired

// @Qualifier(value="dao")

// private Dao dao;

 

 

/* (3)

*

* @Resource 默认按名称进行装配注入

*

* @Resource(name="dao") 按名称进行装配注入

*

* @Resource(type=Dao.class) 按类型进行装配注入

*/

// @Resource

// private Dao dao;

 

public
void add() {

System.out.println("----- Service -----");

dao.add();

}

 

}

 
 

 
 

 
 

(3)编写一个测试类

 
 

TestAnno.java:

 
 

package com.siwuxie095.anno;

 
 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 
 

public class TestAnno {

 

/**

* 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包)

*

* 选中方法名,右键->Run As->JUint Test

*/

@Test

public
void testService() {

 

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

 

Service service=(Service) context.getBean("service");

 

service.add();

}

 

}

 
 

 
 

 
 

 
 

 
 

 
 

 
 

(四)注解和配置文件混合使用

 
 

 
 

1、一般情况下:

 
 

(1)创建对象的操作,使用配置文件的方式实现

 
 

(2)注入属性的操作,使用注解的方式实现

 
 

 
 

 
 

2、具体实现

 
 

(1)编写一个
Dao 类

 
 

Dao.java:

 
 

package com.siwuxie095.anno;

 
 

 
 

public class Dao {

 
 

public
void add() {

System.out.println("----- Dao -----");

}

 

}

 
 

 
 

 
 

(2)编写一个
Service 类

 
 

Service.java:

 
 

package com.siwuxie095.anno;

 
 

import javax.annotation.Resource;

 
 

 
 

public class Service {

 

@Resource

private Dao dao;

 
 

 

public
void add() {

System.out.println("----- Service -----");

dao.add();

}

 

}

 
 

 
 

 
 

(3)在配置文件中配置
Bean

 
 

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">

 
 

 
 

<!--

开启注解扫描:到包中扫描类、方法、属性上面是否有注解

 

base-package 属性:表示要扫描的包。如果有多个,以逗号隔开,


缩短包路径,写成 com.siwuxie095,甚至写成 com

-->

<context:component-scan
base-package="com.siwuxie095.anno"></context:component-scan>

 

<bean
id="dao"
class="com.siwuxie095.anno.Dao"></bean>

 

<bean
id="service"
class="com.siwuxie095.anno.Service"></bean>

 
 

 
 

</beans>

 
 

 
 

 
 

(4)编写一个测试类

 
 

TestAnno.java:

 
 

package com.siwuxie095.anno;

 
 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 
 

public class TestAnno {

 

/**

* 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包)

*

* 选中方法名,右键->Run As->JUint Test

*/

@Test

public
void testService() {

 

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

 

Service service=(Service) context.getBean("service");

 

service.add();

}

 

}

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

【made by siwuxie095】

基于注解的方式管理Bean的更多相关文章

  1. 基于注解的形式配置Bean

    基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...

  2. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

  3. 使用Spring框架入门四:基于注解的方式的AOP的使用

    一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...

  4. Spring中基于注解方式管理bean

    操作步骤 第一步:导入相关jar包 spring IoC的基本包 Spring支持注解的Jar包 第二步:创建Spring配置文件,ApplicationContext.xml 引入约束和开启注解扫描 ...

  5. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Spring4学习回顾之路09-基于注解的方式配置bean

    一:基于注解配置Bean 首先介绍下组件扫描(component scanning): Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 包括: -@Component ...

  7. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  8. Java开发学习(十三)----基于注解开发定义第三方bean及注解开发总结

    在前面的博客中定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办? 遇到上述问题,我们就需要有一种更加 ...

  9. spring使用注解的方式创建bean ,将组件加入容器中

    第一种使用@Bean的方式 1.创建一个bean package com.springbean; public class Person { private String name; private ...

随机推荐

  1. 穷举算法和递推算法(Java)

    穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...

  2. flex布局在垂直居中里,元素超过容器大小后,不能通过滚动条滚动到顶端,这是个flex的bug

    The Problem Flexbox makes centering very easy. By simply applying align-items: center and justify-co ...

  3. checkbox不显示,试试去掉-webkit-appearance这个样式

    目前在项目中发现一个大坑,搞的我找了好久不知道因为什么,自用的reset.css中加入了 -webkit-appearance: none;其他所有表单没有出现问题,但checkbox会不显示,值改为 ...

  4. iOS-----使用GCD实现多线程

    使用GCD实现多线程 GCD的两个核心概念如下: 队列 队列负责管理开发者提交的任务,GCD队列始终以FIFO(先进先出)的方式来处理任务---但 由于任务的执行时间并不相同,因此先处理的任务并一定先 ...

  5. LOJ2319. 「NOIP2017」列队【线段树】

    LINK 思路 神仙线段树 你考虑怎么样才能快速维护出答案 首先看看一条链怎么做? 首先很显然的思路是维护每个节点的是否出过队 然后对于重新入队的点 直接在后面暴力vector存一下就可以了 最核心的 ...

  6. C#中系统时间和UNIX时间戳互相转换

    在项目开发过程中,有时会遇到不同程序之间相互调用数据,数据中不免会包含时间,比如ASP.NET调用PHP,牵扯到时间就要做一下处理,PHP程序中一般存取的都是UNIX时间,不像ASP.NET存储的是年 ...

  7. [BZOJ4802]欧拉函数

    bzoj description 给出\(n\),求\(\varphi(n)\).\(n\le10^{18}\) sol \(Pollard\ Rho\),存个代码. code #include< ...

  8. 零基础学Cocos2d-X 3.0 - 04

    忙完两个项目后.最终有时间继续学习Cocos2d-X 了. 常听人说.Cocos2d-X 有四个类是最经常使用的,包含: Director 类----> 导演 Scene 类 -----> ...

  9. 安装CentOS 6.x出现Disk sda contains BIOS RAID metadata

    今天在安装CentOS 6.6的时候,当进到检测硬盘步骤的时候,总是过不去,报错如下:Disk sda contains BIOS RAID metadata, but is not part of ...

  10. oracle 锁表/解锁 杀进程

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...