通过xml的方式进行对象的实列化或属性注入或许有一些繁琐,所以在开发中常用的方式更多是通过注解的方式实现对象实例化和属性注入的。

开始之前

1.导入相关的包(除了导入基本的包还要导入aop的包);

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

3. 开启注解扫描;

使用注解创建对象

四种注解:

  1. @Component
  2. @Controller
  3. @Service
  4. @Repository

    目前这四个名字不同的注解的功能是一样的,至于为啥名字不同应该是为spring后续版本做准备吧(目前spring使用的版本是4.x的版本)。

过程:

Spring配置文件:

<?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="com.test"></context:component-scan> </beans>

Person类对象代码:

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; /**
* 用@Component创建对象,对象名为person
* 用@Scope声明value为prototype,是创建多列对象
*/
@Component(value="person")
@Scope(value="prototype")
public class Person {
public void add() {
System.out.println("............person");
}
}

Test测试代码:

package com.test.vo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beanTest1.xml");
Person person = (Person) context.getBean("person");
person.add();
}
}

注解注入属性

  1. @Autowired注解进行注入(例:经Dao注入到Service中):

Daotest:

package com.test.vo;

import org.springframework.stereotype.Component;

@Component(value="daotest")
public class DaoTest {
public void printDao() {
System.out.println("............DaoTest");
}
}

ServiceTest:

package com.test.vo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service(value="servicetest")
public class ServiceTest { @Autowired
DaoTest dao; public void printService() {
System.out.println(".........Service");
dao.printDao();
}
}

测试类Test:

package com.test.vo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beanTest1.xml");
ServiceTest servicetest = (ServiceTest) context.getBean("servicetest");
servicetest.printService();
}
}
  1. @Resource进行注入

    则ServiceTest改为:
package com.test.vo;

import javax.annotation.Resource;
import org.springframework.stereotype.Service; @Service(value="servicetest")
public class ServiceTest { @Resource(name="daotest")
DaoTest dao; public void printService() {
System.out.println(".........Service");
dao.printDao();
}
}

两个注解的异同:

  • 异:

    @Autowried是Spring提供的注解,是按类型(byType)注入的。

    @Resource是JEE提供的,是按名称(byName)注入的。
  • 同:都可以写在属性和setter方法上。

    可以参考:Spring注解@Resource和@Autowired区别对比

【初识Spring】对象(Bean)实例化及属性注入(注解方式)的更多相关文章

  1. spring中bean实例化时机以及整个运转方式

    接上一篇文章,一般在servlet获取到请求之后 在service方法中就可以完成所有的请求处理以及返回,但是我们会采用更高级的MVC框架来做.也就是说所有的MVC框架入口就是serlvet中的ser ...

  2. springMvc将对象json返回时自动忽略掉对象中的特定属性的注解方式

    1.注解使用在 类名,接口头上 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnorePropertie ...

  3. 【初识Spring】对象(Bean)实例化及属性注入(xml方式)

    title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...

  4. Spring中bean的四种注入方式

    一.前言   最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...

  5. 这一次搞懂Spring的Bean实例化原理

    文章目录 前言 正文 环境准备 两个重要的Processor 注册BeanPostProcessor对象 Bean对象的创建 createBeanInstance addSingletonFactor ...

  6. spring中bean的作用域属性singleton与prototype的区别

    1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会 ...

  7. Spring中bean标签的属性和值:

    Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...

  8. Spring声明式事务管理(基于注解方式实现)

    ----------------------siwuxie095                                 Spring 声明式事务管理(基于注解方式实现)         以转 ...

  9. Spring总结四:IOC和DI 注解方式

    首先我们要了解注解和xml配置的区别: 作用一样,但是注解写在Bean的上方来代替我们之前在xml文件中所做的bean配置,也就是说我们使用了注解的方式,就不用再xml里面进行配置了,相对来说注解方式 ...

随机推荐

  1. Android Activity 开发常用技巧整理

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  2. Vue实战狗尾草博客管理平台第六章

    Vue实现狗尾草博客后台管理系统第六章 本章节内容 文章列表 文章详情 草稿箱 文章发布. 本章节内容呢,开发的很是随意哈,因为多数就是element-ui的使用,熟悉的童鞋,是可以很快完成本章节的内 ...

  3. 获取BOM标准用量

    Select dbms_aw.eval_number(listagg(' 1' ||                                        sys_connect_by_pat ...

  4. Could not resolve resource location pattern [classpath:com/****/mappers/*.xml]: class path resource [com/****/mappers/] cannot be resolved to URL because it does not exist的问题

    这里建议先去看看路径的问题,看看application.xml的里面的导入的相应的配置文件的路径有没有问题,如下: 再者看看相应的注解有没有加上,service和controller等的注解 如果再不 ...

  5. 2019CCPC网络选拔赛 hdu6703 array(主席树+set)

    题意 给你一个1~n的排列,由两种操作: 1 pos:将a[pos]+10 000 000 2 r k:求大于等于k且不等于a[1~r]的数的最小值. 强制在线. 思路 如果没有1操作,那么我们直接主 ...

  6. 【PAT甲级】1008 Elevator (20分)

    1008 Elevator 题目: The highest building in our city has only one elevator. A request list is made up ...

  7. vue中如何使用echarts,使用axios获取数据

    1==>首先准备一个容器 <div id="echartContainer" style="width:400px; height:400px"&g ...

  8. c# 第27节 结构、枚举

    本节内容: 1:为什么要有结构 2:结构体的声明和使用 3:为什么要有枚举.常识大考验 4:枚举的声明 5:枚举的使用 6:枚举的各种转换 1:为什么要有结构 2:结构体的声明和使用 结构的声明位置: ...

  9. Es6编程风格

    let 取代 var let 和 const 之间优先使用 const 字符串 静态字符串一律使用单引号或反引号,不使用双引号 动态字符串使用反引号 `` 解构赋值 使用数组成员对变量赋值时,优先使用 ...

  10. 古来月小队 Alpha冲刺阶段博客目录

    一.Scrum Meeting 第六周: 链接:https://www.cnblogs.com/ouc-xxxxxx/p/11789325.html 任务:搭建安卓编程环境,学习安卓前端知识 第七周: ...