通过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. 记录一下自己在MVC项目中如何防CSRF攻击,直接上代码

    1.前端的处理: 2.后台 1.)添加过滤器,哪里用放哪里 2.)需要验证的方法上直接添加过滤器即可 大功告成 以下为过滤器代码块 /// <summary>/// ajax中加上Anti ...

  2. 无序数组中用 快速排序的分治思想 寻找第k大元素

    #include <stdio.h> int *ga; int galen; void print_a(){ ; i < galen; i++){ printf("%d & ...

  3. 3.Python爬虫入门_正则表达式(简单例子)

    #2019-11-23 import requests import time import re #Python正则表达式库 if __name__=='__main__': #海量爬取图片数据 # ...

  4. 多线程(六)多线程同步_SemaPhore信号量

    信号量依然是一种内核同步对象,它的作用在于控制共享资源的最大访问数量 例如:我们有一个服务器,为这服务器创建一个线程池,线程池有五个线程,每个线程处理1个请求.当五个线程都在处理请求时,这个线程池己到 ...

  5. lua 8 字符串

    转自:http://www.runoob.com/lua/lua-strings.html 字符串或串(String)是由数字.字母.下划线组成的一串字符. Lua 语言中字符串可以使用以下三种方式来 ...

  6. React、Vue、Angular对比 ---- 新建及打包

    react:npm install -g create-react-appcreate-react-app react-projectnpm installnpm run start vue:npm ...

  7. [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程

    [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 ...

  8. Paper | Multi-scale Dense Networks for Resource Efficient Image Classification

    目录 故事背景 方法 两种加速策略 网络设计 网络优化 失败设计 回头品味 实验 数据集和数据处理 结果 第二次阅读 本文不是第一个提出early exit思想的 写作流畅 网络回顾 其他 发表在IC ...

  9. JavaScript查找两个数组的相同元素和相差元素

    let intersection = a.filter(v => b.includes(v)) 返回交集数组 let difference = a.concat(b).filter(v => ...

  10. 当职责链遇到DI

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...