【Spring】的【Bean】管理(注解)【四个相同功能的注解】

  • 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能。
  • 注解写法:@注解名称(属性名称=属性值)
  • 注解使用在类、方法、属性上面

  (注解可以替代配置文件,并非完全替代):

  1.创建类,创建方法

 public class User {
public void add(){
System.out.println("add-----------");
}
}

  2.创建spring配置文件,引入约束

 <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"> <!-- bean definitions here -->
</beans>

  3.配置开启注解扫描

 <!--
开启注解扫描功能
(1)到包里面扫描类、方法、属性上面是否有注解
-->
<context:component-scan base-package="com.anno"></context:component-scan> <!-- 只会扫描属性上面的注解,所以我们不用 -->
<context:annotation-config></context:annotation-config>

一、 使用注解创建对象

在创建对象的类上面使用注解实现

 @Component(value="user")    //<bean id="" class="">
public class User {
public void add(){
System.out.println("add-----------");
}
}

写测试代码

 @Test
public void testAno(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User)applicationContext.getBean("user");
user.add();
}

   创建对象有四个注解,下面还有三个:

Spring中提供了@Component的三个衍生注解:(功能目前来说是一致的,都是用来创建对象)

@Controller

Web层

@Service

业务层

@Repository

持久层

这三个注解是为了让标注类本身用途清晰,spring在后续的版本中会对其增强。

  创建对象单实例还是多实例  在类上面添加注解@scope

 @Component(value="user")    //<bean id="" class="">
@Scope(value="prototype")
public class User {
public void add(){
System.out.println("add-----------");
}
}

二、使用注解注入属性

第一种注解(很少用):@Autowired

需求:创建service类,创建dao类,在service得到dao对象

 @Component(value="userdao")
public class UserDao {
public void add(){
System.out.println("dao--------------add");
}
}
@Service(value="userservice")
public class UserService {
//得到dao对象
//1定义dao类型属性
//在dao属性上面使用注解完成对象注入 autowired代表自动装配/注入,注意这里的private UserDao userdao自动注入是根据类名注入的,和UserDao里面的注入对象没有任何关系
@Autowired
private UserDao userdao;
//使用注解方式不需要set方法
public void add(){
System.out.println("service------------add");
userdao.add();
}
}
 @Test
public void testService(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService)applicationContext.getBean("userservice");
userService.add();
}

第二种注解(经常用,因为能够准确注入)@Resource:

 @Service(value="userservice")
public class UserService {
//得到dao对象
//1定义dao类型属性
//2在dao属性上面使用注解完成对象注入 autowired代表自动装配
//@Autowired
//name属性值写注解创建的dao对象value值
@Resource(name="userdao")
private UserDao userdao;
//使用注解方式不需要set方法
public void add(){
System.out.println("service------------add");
userdao.add();
}
}

三、xml和注解方式混合使用

1、创建对象的操作使用配置文件方式实现;

 public class BookDao {
public void book(){
System.out.println("book dao-----------");
}
}
 public class OrderDao {
public void order(){
System.out.println("order dao-----------");
}
}
 public class BookService {
//得到bookdao和orderdao对象
@Resource(name="bookDao")
private BookDao bookdao;
@Resource(name="orderDao")
private OrderDao orderdao; public void add(){
System.out.println("bookservice");
bookdao.book();
orderdao.order();
}
}

配置文件

 <!-- 配置对象 -->
<bean id="bookService" class="com.xmlanno.BookService"></bean>
<bean id="bookDao" class="com.xmlanno.BookDao"></bean>
<bean id="orderDao" class="com.xmlanno.OrderDao"></bean>

2、注入属性的操作使用注解实现

 //得到bookdao和orderdao对象
@Resource(name="bookDao")
private BookDao bookdao;
@Resource(name="orderDao")
private OrderDao orderdao;

【Spring】的【Bean】管理(注解)【四个相同功能的注解】的更多相关文章

  1. Spring的bean管理(注解方式)

    注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...

  2. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  3. Spring 的Bean管理的常用注解

    属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配  按名称注入 @Qualifier 强制使用名称注入 ...

  4. Spring 的 Bean 管理(注解方式)

    Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...

  5. Spring之Bean管理------注解方式

    编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...

  6. Spring学习(二)Spring的bean管理(XML)

    Bean的实例化方式 1.在Spring里面通过配置文件创建对象 2.bean实例化的三种方式第一种:使用类的无参数构造函数创建(最常用的方式,第2种和第3种方法一般不用) 如果类里面没有无参的构造函 ...

  7. 面试阿里,字节,美团必看的Spring的Bean管理详解

    IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...

  8. Spring 的 Bean 管理(XML 方式)

    Spring 的 Bean 管理(XML 方式) 1. 三种实例化 Bean 的方式 使用类构造器实例化(默认无参数) 使用静态工厂方法实例化(简单工厂模式) 使用实例工厂方法实例化(工厂方法模式) ...

  9. Spring Boot 2.X(十四):日志功能 Logback

    Logback 简介 Logback 是由 SLF4J 作者开发的新一代日志框架,用于替代 log4j. 主要特点是效率更高,架构设计够通用,适用于不同的环境. Logback 分为三个模块:logb ...

随机推荐

  1. ARM调试器只能偶尔连接成功问题

    这里分析一个ARM板子JTAG调试器经常连接失败,只能偶尔连上目标板问题. 背景 这是原先另一个部门的板子,在部门合并之后,最近要对这个板子的代码体系进行转移,在过问开发进度时,工程师反映这个板子调试 ...

  2. Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用

    在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...

  3. Spring学习之设计模式,动态代理和gclib动态代理

    传统的代理模式是静态代理,也就是在方法区域中写入方法. 而动态代理的作用是,不修改实现类的代码,能够在代码的前后或者抛出异常的前后执行某个方法. 动态代理类的实现 //Interface public ...

  4. Python之面向对象之单例模式的四种方式

    一.内容 保证一个类只有一个实例,并提供一个访问它的全局访问点 二.角色 单利 三.使用场景 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时 比如:数据库链接.Socket创建链接 四.优 ...

  5. 设计模式Design Pattern(4) -- 访问者模式

    什么是访问者模式? 一个对象有稳定的数据结构,却为不同的访问者提供不同的数据操作,对象提供接收访问者的方法,从而保证数据结构的稳定性和操作的多样性.也可以理解为,封装对象的操作方法,达到不改变对象数据 ...

  6. JVM调优总结(三)——分代垃圾回收详述

    为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...

  7. 【NOIP2016提高A组模拟9.9】闭门造车

    题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...

  8. void 运算符和 逗号运算符

    一.void 运算符 void 运算符的作用目的是 执行一个表达式,但是不用返回任何值,或者是返回undefined void 本身就有 无效.空的 的意思. void运算符的用法: 1.不加括号的写 ...

  9. grpc:What is gRPC

    本文将介绍gRPC和protocol buffers.gRPC可以利用protocol buffers作为其接口定义语言(Interface Definition Language,IDL)和信息交换 ...

  10. QT 问题提问网站

    https://stackoverflow.com/questions/tagged/qt