spring 依赖注入的几种类型<一>

本文详细介绍了Spring框架中的依赖注入机制,包括属性注入和构造函数注入两种方式,并通过具体实例展示了如何配置不同类型的属性(如list、map等)。此外,还探讨了如何在配置文件中映射对象间的依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring 依赖注入:
关于ioc依赖注入方式,解决了在java程序中使用new 方式来产生对象,实现了解耦。
下面将结合代码 实现类对应属性与配置文件的映射,对于list,map,等属性映射做了测试。

下面bean 代码只下了属性,构造函数以及set,get 方法省略

public class StudentBean {

private int id;
private String name;
private BoxBean box; // 对象类型映射
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

// 类 pencilBean


通过属性依赖注入方式:


<bean id ="stud1" class="com.xxg.bean.StudentBean">
<property name="id" value ="1"></property>
<property name="name" value ="xxg"></property>
[color=red]<property name="box" ref ="box1"></property>[/color]
</bean>

其中划红线的属性为一个对象,这个对象在对应生成的配置文件为:

<bean id ="box1" class ="com.xxg.bean.BoxBean">
<property name ="color" value="红色"></property>
<property name ="name" value ="飞哥书包"></property>
<property name ="pencils">
<list>
<ref bean="pencil1"></ref> <!--list里面装的是引用类型用 <ref bean="pencil1"> </ref> pencil1 为一个对象 形式 -->
<ref bean="pencil2"></ref>
<ref bean="pencil3"></ref>
</list>
<!--

如果list 里面装的是基本数据类型
则 用value设置
-->
<list>
<value>aaaaaaaaa</value>
<value>bbbbbbbbb</value>
</list>


</property>

</bean>



public class PencilBean {

private String type;
private String name;
private Map<String, String> map;
public Map<String, String> getMap() {
return map;
}

配置文件如下:
注意关于map的配置


<bean id ="pencil1" class ="com.xxg.bean.PencilBean"> <!-- 相当于 PencilBean penclil1 = new PencilBeran() -->
<property name ="type" value="a1"></property> <!--penclil1.setType("a1") -->
<property name ="name" value="美丽牌"></property> <!--penclil1.setName("美丽牌") -->

<property name ="map">
<map >
<entry>
<key >
<value>no1</value> <!--Map key 的值 -->
</key>
<value>声声道铅笔</value> <!-- 该key 对应的值 -->
</entry>

<entry>
<key >
<value>no2</value>
</key>
<value>二位keguan</value>
</entry>
</map>
</property>
</bean>



通过构造函数依赖注入 SutentBean对象


<bean id ="stud2" class ="com.xxg.bean.StudentBean">
<constructor-arg type="int" value="2"></constructor-arg> <!--是int 类型但不能写成java.lang.Integer -->
<constructor-arg type="java.lang.String" value ="yml"></constructor-arg>
<constructor-arg type ="com.xxg.bean.BoxBean" ref="box1"></constructor-arg>
</bean>


[size=large]总结:关于依赖注入的配置文件 注意2点就Ok:
1.里面括号ref总共 在2个地方用到,一个是在映射属性为list类型且里面装的东西为对象或者引用类型 此时,用法为<ref bean ="指向对象的引用(也可以理解为该类产生的对象)简单理解为bean 的id值"></ref>

2.在当映射属性为对象类型时,此时ref用法为<property name="属性名" ref ="该属性对象类型的id值"></property

[/size]
<think>嗯,用户导入了Spring ContextAspectJ Weaver的依赖,但没出现Spring Config的问题。首先,我需要理清楚这两个依赖的作用。Spring Context是Spring框架的核心,提供IoC依赖注入功能,而AspectJ Weaver用于支持AOP,比如切面编程。 用户提到“没有出现Spring Config”,可能是指在IDE里没有自动生成配置,或者在项目结构中找不到相关配置。常见的情况是,用户可能期望Spring自动生成配置文件,但实际上需要手动创建。比如,Spring的XML配置文件(如applicationContext.xml)或Java配置类(带@Configuration的类)需要用户自己创建,Spring不会自动生成。 另外,检查依赖是否正确引入。用户提供的Maven依赖版本是5.1.11.RELEASEAspectJ 1.9.6,可能存在版本兼容性问题吗?不过这两个版本通常是兼容的,但需要确认是否有冲突。用户是否执行了Maven的重新导入?有时候依赖没下载完全会导致问题。 还有,是否缺少必要的配置?比如,如果使用注解驱动,需要在配置类上添加@EnableAspectJAutoProxy,或者在XML中配置<aop:aspectj-autoproxy/>。如果用户没有正确配置这些,即使有AspectJ Weaver的依赖,AOP也不会生效,导致Spring Config不出现。 另外,项目结构是否正确?比如,配置文件是否放在src/main/resources目录下,或者配置类是否在组件扫描的包路径下。如果配置类不在扫描范围内,Spring不会加载它,导致配置无效。 用户可能混淆了依赖引入配置创建。添加依赖只是提供了库的支持,但具体的配置需要用户自行设置。比如,使用Java配置或XML配置来定义Bean切面。如果用户没有创建这些配置,Spring自然不会自动生成。 还有可能用户期望IDE的某些功能,比如Spring Tools Suite的仪表盘或配置支持,但普通项目可能需要手动启用Spring插件或配置。或者,用户可能没有正确设置Spring Facet,导致IDE没有识别到Spring项目结构。 最后,是否需要检查构建工具的输出,确认依赖是否被正确下载,没有出现错误或冲突。比如,Maven的pom.xml是否正确,依赖是否下载到本地仓库,是否存在网络问题导致依赖下载失败。</think>你遇到的问题可能有以下几个原因,以下从依赖作用配置方式逐步分析: 1. **依赖作用分析** - `spring-context`: 提供Spring核心容器功能(IoC/DI)基础注解支持 $$ \text{Spring Context} \supset \{ \text{@Component, @Autowired, @Configuration} \} $$ - `aspectjweaver`: 提供AspectJ切面织入能力(配合`@Aspect`使用) 2. **未出现Spring Config的可能原因** **情况:未主动创建配置文件** - 需要手动创建以下两种配置之: - **XML配置**:`src/main/resources/applicationContext.xml` ```xml <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" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="..."> <context:component-scan base-package="com.example"/> <aop:aspectj-autoproxy/> </beans> ``` - **Java配置类**:`@Configuration`标注的类 ```java @Configuration @ComponentScan("com.example") @EnableAspectJAutoProxy public class AppConfig {} ``` **情况二:配置未被正确加载** - **XML配置需要初始化容器**: ```java ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); ``` - **Java配置需要初始化容器**: ```java AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); ``` 3. **验证步骤** ```mermaid graph TD A[检查依赖] -->|mvn dependency:tree| B[确认spring-conject存在] B --> C[检查配置文件位置] C --> D[确认是否启用组件扫描] D --> E[验证AOP代理是否启用] ``` 4. **典型成功案例** ```java // 定义切面 @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("方法执行: " + joinPoint.getSignature()); } } // 主程序 public class MainApp { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); MyService service = ctx.getBean(MyService.class); service.execute(); } } ``` 5. **版本兼容性建议** - Spring 5.1.x 推荐配合 AspectJ 1.9.x 使用 - 若需使用最新特性,可升级至: ```xml <version>5.3.27</version> <!-- spring-context --> <version>1.9.19</version> <!-- aspectjweaver --> ``` 请根据实际项目结构检查配置文件位置加载方式,若仍无法解决建议提供具体错误日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值