JAVA入门[13]-Spring装配Bean

简介:

一、概要

Sping装配bean主要有三种装配机制:

  • 在XML中进行显式配置。
  • 在Java中进行显式配置。
  • 隐式的bean发现机制和自动装配。

原则:

建议尽可能地使用自动配置的机制,显式配置越少越好。当你必须要显式配置bean的时候(比如,有些源码不是由你来维护的,而当你需要为这些代码配置bean的时候),我推荐使用类型安全并且比XML更加强大的JavaConfig。最后,只有当你想要使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才应该使用XML。

二、自动装配

Spring从两个角度来实现自动化装配:

  • 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
  • 自动装配(autowiring):Spring自动满足bean之间的依赖

1.组件扫描

@Component注解:添加注解表明该类会作为组件类,并告知Spring要为这个类创建bean。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package  bean;
import  org.springframework.stereotype.Component;
@Component
public  class  Category {
     private  int  cateId;
     public  int  getCateId() {
         return  this .cateId;
     }
 
     public  void  setCateId( int  id) {
        this .cateId = id;
     }
 
     @Override
     public  String toString() {
         return  " 商品类型 id="  this .cateId;
     }
}

  

2.启用组件扫描两种方式:

①使用XML来启用组件扫描,在applicationContext.xml配置:

1
<context:component-scan base- package = "autowire.bean" ></context:component-scan>

  

单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
@ContextConfiguration (locations =  "classpath*:applicationContext.xml" )
@RunWith (SpringJUnit4ClassRunner. class )
 
public  class  testAutowireXml {
     @Autowired
     private  Category category;
 
     @Test
     public  void  TestXmlBean() {
         Assert.assertNotNull(category);
     }
}

  

②使用java配置

前面的bean类不做任何调整,通过@ComponentScan注解实现自动扫描。例如新建java配置文件BeanConfig.java

1
2
3
4
@Configuration
@ComponentScan (basePackageClasses = bean.Category. class )
public  class  BeanConfig {
}

  

单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith (SpringJUnit4ClassRunner. class )
@ContextConfiguration (classes = BeanConfig. class )
public  class  testAutowireJava {
 
     @Autowired
     private  Category category;
 
     @Test
     public  void  categoryNotNull() {
         Assert.assertNotNull(category);
     }
}

  

三、JavaConfig装配bean

上面的BeanConfig就是用java config方式实现的。java Config也是一个java类,但它不应该包含任何业务逻辑,也不应该侵入到业务逻辑代码之中,通常会将JavaConfig放到单独的包中。

创建java config关键是使用@Configuration ,表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节。

在JavaConfig中声明bean,我们需要编写一个方法,这个方法会创建所需类型的实例,然后给这个方法添加@Bean注解。

我们新建一个config文件JavaConfig.java,是在BeanConfig.java基础上去掉@ComponentScan注解,并添加category()返回Category实例。

1
2
3
4
5
6
7
8
@Configuration
public  class  JavaConfig {
 
     @Bean
     public  Category category(){
         return  new  Category();
     }
}

  

单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith (SpringJUnit4ClassRunner. class )
@ContextConfiguration (classes = JavaConfig. class )
public  class  testJavaConfig {
 
     @Autowired
     private  Category category;
 
     @Test
     public   void  testCategoryBean(){
         Assert.assertNotNull(category);
     }
}

  

四、XML方式装配bean

JAVA入门[3]—Spring依赖注入这篇笔记中包含了如何通过xml方式装配bean实例。

1.构造器传参

①首先为Category添加构造函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  class  Category {
     private  int  cateId;
     public  Category() {
     }
 
     public  Category( int  id) {
         cateId = id;
     }
 
     public  int  getCateId() {
         return  this .cateId;
     }
 
     public  void  setCateId( int  id) {
         this .cateId = id;
     }
 
     @Override
     public  String toString() {
         return  " 商品类型 id="  this .cateId;
     }
}

  

②applicationContext添加bean节点,为constructor-arg设置Id或者index。

1
2
3
<bean  class = "bean.Category" >
    <constructor-arg name= "id"  value= "100" ></constructor-arg>
</bean>

1
2
3
<bean  class = "bean.Category" >
  <constructor-arg index= "0"  value= "100" ></constructor-arg>
</bean>

  

③单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ContextConfiguration (locations =  "classpath*:applicationContext.xml" )
@RunWith (SpringJUnit4ClassRunner. class )
public  class  testAutowireXml {
 
     @Autowired
     private  Category category;
 
……
 
     @Test
     public  void  testId(){
         Assert.assertEquals( 100 ,category.getCateId());
     }
}

  

④c-命名空间

这种语法用起来简化一些。

Image

调整②中的bean节点:

1
<bean  class = "bean.Category"  c:_0= "100" ></bean>

1
<bean  class = "bean.Category"  c:id= "100" ></bean>

2.设置属性 :

①通过为bean设置property实现属性

1
2
3
<bean  class = "bean.Category"  >
       <property name= "cateId"  value= "100" ></property>
</bean>

  

②p-命名空间

前面的bean配置可以简化为:

1
<bean  class = "bean.Category"  p:cateId= "100" ></bean>

  

Image

五、属性占位符

Spring支持将属性定义到外部的属性的文件中,并使用占位符值将其插入到Spring bean中。在Spring装配中,占位符的形式为使用“${ ... }”包装的属性名称。

config.properties:

1
cateid= 100

  

spring-config.xml:

1
2
3
4
5
6
7
8
9
<bean id= "propertyConfigurer"  class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name= "locations" >
            <list>
                <value>classpath:properties/config.properties</value>
            </list>
        </property>
    </bean>
 
    <bean  class = "bean.Category"  p:cateId= "${cateid}" ></bean>

 

示例代码https://github.com/cathychen00/learnjava/tree/master/DemoBean




    本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/p/6868149.html,如需转载请自行联系原作者


相关文章
|
5月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
491 0
|
5月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
627 2
|
5月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
380 8
|
6月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
3344 58
|
6月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
520 0
|
6月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
712 117
|
6月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
2091 0
|
6月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
837 3
|
6月前
|
监控 Java API
2025 年全新出炉的 Java 学习路线:从入门起步到实操精通的详细指南
2025年Java学习路线与实操指南,涵盖Java 21核心特性、虚拟线程、Spring Boot 3、微服务、Spring Security、容器化部署等前沿技术,助你从入门到企业级开发进阶。
1423 0