基于注解的方式管理Bean

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

时间: 2024-12-20 01:16:09

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

基于注解的形式配置Bean

基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件扫描(component scanning): Spring 能够从 classpath( 类路径下,也就是Src文件夹下)下自动扫描, 侦测和实例化具有特定注解的组件.  特定组件包括: @Component: 基本注解, 标识了一个受 Spring 管理的组件   @Respository: 建

Spring4学习笔记-AOP(基于注解的方式)

1.加入jar包 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-logging-1.1.3.jar spring-aop-4.1.0.RELEASE.jar spring-aspects-4.1.0.RELEASE.jar spring-beans-4.1.0.RELEASE.jar spring-context-4.1.0.RELE

SSH(Struts2+Spring+Hibernate)框架搭建流程&lt;注解的方式创建Bean&gt;

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE

基于注解的事务管理

第一步:事务管理器: <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> 第二步:注解事务: <!-- 开启注解的事务管理

Spring配置形式之基于注解的方式

在classpath中扫描组件 组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 特定组件包括: @Component: 基本注解, 标识了一个受 Spring 管理的组件 @Respository: 标识持久层组件 @Service: 标识服务层(业务层)组件 @Controller: 标识表现层组件 对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解

基于注解的方式整合Srpingmvc+Redis

项目中原本使用的是手动获取redis链接池的方式进行的与Spring的整合,现在需要修改为注解的形式.初次接触redis,做个记录. 1. 首先添加 jackson的jar包, 需要添加的 jar包共有三个,分别为:jackson-annoations-2.4.4.jar,jackson-core-2.4.4.jar,jackson-databind-2.4.4.jar,此项目中使用的是同一版本的jar. 2. 更新redis的配置文件,添加redis缓存管理器配置RedisCacheManag

Mybatis基于注解的方式访问数据库

1. 使用方式:在Service层直接调用 1 package com.disappearwind.service; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Repository; 5 import org.springframework.stereotype.Service; 6 7 import com.disappea

Mybatis学习笔记-CURD(基于注解的方式)

User.java实体类 public class User { private int id; private String username; private int age; //.. } UserMapper.java接口 public interface UserMapper { @Insert("insert into users(username, age) values(#{username}, #{age})") public int insertUser(User 

spring(读取外部数据库配置信息、基于注解管理bean、DI)

###解析外部配置文件在resources文件夹下,新建db.properties(和数据库连接相关的信息) driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/dbusername=rootpassword=root 开发步骤1)创建maven工程添加web.xml添加tomcat运行环境添加jar spring-webmvc,junit,commons-dbcp,mysql添加application.xml