通过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. Java实现图片按修改时间排序

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/127 图片按修改时间先后顺序排序 刚刚碰到了个小问题,处理 ...

  2. PHP代码篇(三)--常用方法

    模块下不间断更新,PHP常用方法,欢迎留言! 一.递归删除指定目录下所有文件及文件夹 /** * 递归删除指定目录下所有文件及文件夹 * @param unknown $path,删除路径 */ fu ...

  3. 微信小程序之 catalog 切换

    组件名称:catalog 组件属性:catalogData,type:String 组件描述:这是一个子组件,数据从父组件中传递 效果图: catalog 目录为多个,使用 scroll-view 容 ...

  4. itest(爱测试) 3.3.7 发布,开源BUG 跟踪管理& 敏捷测试管理软件

    v3.3.7 下载地址 :itest下载 itest 简介:查看简介 V3.3.7 增加了 5个功能增强,和8个BUG修复 ,详情如下所述. 5个功能增强 :(1)任务看板中,除了显示任务外,增加测试 ...

  5. 3、zabbix组件之间的关系

    我们在安装zabbix的时候安装了四个软件:zabbix-server.zabbix-server-mysql.zabbix-web-mysql.zabbix-agent,那么这个四个软件之间有什么关 ...

  6. Html学习之十六(表格与表单学习--课程表制作)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 微信小程序picker重写,精确到时分秒

    https://developers.weixin.qq.com/miniprogram/dev/component/picker.html 微信小程序提供的picker组件,只精确到分,项目中需要秒 ...

  8. 浅谈this指向问题

    链接地址:https://www.jianshu.com/p/34572435b5d0

  9. 解决问题:Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean. 注释掉, ...

  10. 快速傅里叶变换(FFT)学习笔记

    定义 多项式 系数表示法 设\(A(x)\)表示一个\(n-1\)次多项式,则所有项的系数组成的\(n\)维向量\((a_0,a_1,a_2,\dots,a_{n-1})\)唯一确定了这个多项式. 即 ...