1.使用xml配置文件装配

  Spring成功启动的三大要件分别是:Bean定义信息、Bean实现类以及Spring本身。

  在xml文件中配置bean,然后使用ClassPathXmlApplicationContext得到Application从而得到bean

首先定义一个bean类:Student

package com.bean;public class Students {String name;String id;String major;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}
}

在xml文件中配置这个bean:beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><bean id="students" class="com.bean.Students"> <!--1-->
<property name="name" value="ironman"></property><!--2--><property name="id" value="111111"></property><property name="major" value="software"></property> </bean>
</beans>

(1)处定义了bean的name和class。

(2)处定义了bean的初始值。

我们可以用一个函数来测试一下这个函数

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Students s =(Students) context.getBean("students");System.out.println(s.name+"\n"+s.id+"\n"+s.major);}}

得到Students的一个对象

2.使用注解配置bean

  不管是XML还是注解,他们都是表达bean定义的载体,其实质都是为Spring容器提供bean的定义信息,表现形式上是将xml定义的东西通过类注解进行描述。

  我们从新定义一个Bean并且注入Students哪个Bean

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component("myClass")//这里通过Component来定义了一个Bean,括号里面的是自己定义的Bean的名字相当于xml中的id
public class MyClass {@Autowired      //这里自动注入Students的Beanprivate Students students;private String classId;private String className;private String teacherName;public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}public String getTeacherName() {return teacherName;}public void setTeacherName(String teacherName) {this.teacherName = teacherName;}public Students getStudents() {return students;}public void setStudents(Students students) {this.students = students;}}

还需要在xml文件配置

Spring在2.5之后提供了一个context命名空间,它提供了通过扫描应用类包以应用注解定义bean的方式。

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"  <!--声明context命名空间-->xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd"><bean id="students" class="com.bean.Students">
<property name="name" value="litao"></property>
<property name="id" value="1110321124"></property>
<property name="major" value="software"></property>
</bean><context:component-scan base-package="com.bean"></context:component-scan><!--使用componet-scan的base-package属性定义要扫描的类包--></beans>

我们用一个Main函数来测试一下这个定义

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainForComponent {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context  = new ClassPathXmlApplicationContext("beans.xml");MyClass myClass =(MyClass) context.getBean("myClass");myClass.setClassId("software engineering");System.out.println(myClass.getClassId()+"\n"+myClass.getClassName()+"\n"+myClass.getStudents().getId());}}

3.基于java类的配置

我们可以不再用xml配置文件来定义bean了

定义一个Class为Bean的配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.bean.MyClass;
import com.bean.Students;@Configuration              //将一个pojo标注为定义bean的配置类
public class AppConf {@Bean                       //将一个pojo定义为一个beanpublic Students myStudents(){return new Students();}@Beanpublic MyClass myClass(){MyClass myClass = new MyClass();myClass.setStudents(myStudents());//将Students注入MyClassreturn myClass();}}

同样的我们来写一个Main来测试一下这个bean的配置函数

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.bean.MyClass;public class Main {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context = new AnnotationConfigApplicationContext(AppConf.class);MyClass myClass = context.getBean(MyClass.class);}}

转载于:https://www.cnblogs.com/ironmantony/p/3475227.html

Spring 三种bean装配的方式相关推荐

  1. 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程

    一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...

  2. SpringBoot 三种拦截http请求方式Filter,interceptor和aop

    SpringBoot 三种拦截http请求方式Filter,interceptor和aop. 这三种拦截方式的拦截顺序是:filter->Interceptor-->ControllerA ...

  3. JDK/Dubbo/Spring 三种 SPI 机制,谁更好?

    点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6950266942875779108 SPI 全称为 Service Provider Interface,是一种服务发现机 ...

  4. JDK/Dubbo/Spring 三种 SPI 机制,谁更好呢?

    JDK/Dubbo/Spring 三种 SPI 机制,谁更好? SPI 全称为 Service Provider Interface,是一种服务发现机制.SPI 的本质是将接口实现类的全限定名配置在文 ...

  5. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

  6. SSO单点登录三种情况的实现方式详解

    SSO单点登录三种情况的实现方式详解 单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子 ...

  7. Objective-C:三种文件导入的方式以及atomic和nonatomic的区别

    一.三种文件导入的方式比较:   类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...

  8. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  9. Python中的urllib,urllib三种不同的请求方式

    1.urllib获取服务器的资源 自定义爬虫的重要组件 获取百度首页的资源: #3.x的标准写法 import urllib.request import urllib.parse#百度的首页 fro ...

最新文章

  1. 关于程序员的59条搞笑但却真实无比的编程语录_技术/软件
  2. gin构建包含模板的二进制文件
  3. Linux tar.gz、tar、bz2、zip的区别,如何选择呢
  4. winform 后台线程更新UI
  5. erlang精要(10)-erl(2)
  6. mysql通过binlog日志来恢复数据
  7. 云服务器维护人员,云服务器维护工作难吗
  8. C#实现图片的无损压缩
  9. 单元测试代码:SpringTest+JUnit
  10. 【kubernetes / k8s 踩坑记录】一定要关闭SWAP
  11. python书写跨越多行的字符串的两种方式
  12. 移除mac下 .Ds_Store的解决办法
  13. Linux学习记录--ACL权限控制
  14. matlab 找到数组中第一个不连续点_超全Matlab绘图方法整理
  15. 思科 Packet Tracer 实验七 DHCP基本配置
  16. win10命令行动态调整网卡优先级
  17. 华为网络设备——利用三层交换机实现VLAN间路由配置实例
  18. 基于SpringBoot+SpringSecurity+JWT+RSA加密算法签名 Auth权限认证搭建教程
  19. 麻雀算法(SSA)优化的BP神经网络预测,SSA-BP回归预测,多输入单输出模型。
  20. Error: rendered manifests contain a resource that already exists.

热门文章

  1. python爬取小说网站资源_利用python的requests和BeautifulSoup库爬取小说网站内容
  2. 如何安装CocoaPods,以便在Xcode中快速添加第三方库
  3. matlab path路径定义文件,MATLAB基本操作(七):有关文件路径的几个函数在编程中的作用...
  4. Pytest之fixture
  5. Delphi的TdxDBGrid自带的一些有用的导出文件的函数(EXCEL、HTML、XML、TXT、INI、Registry等)
  6. Polkadot 0.9.2版本正式发布,对平行链启动至关重要
  7. Vortex DeFi与DeFi Wizard合作建立ETH-BSC跨链桥
  8. SAP License:统计指标固定值和总值含义
  9. 评分模型和额度模型的两种不同应用场景
  10. API、H5跟风控相关的知识是否了解?