Sping--life cycle

本文通过一个具体的示例展示了Spring框架中如何使用原型作用域来管理bean的生命周期,并对比了单例作用域的行为差异。

bean.xml:

注意, 千万不要后面加上 scope="prototype"

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean>
	
  <bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="prototype">
  	<!-- 
  	<property name="userDAO" ref="u" />
  	 -->
  	 <constructor-arg>
  	 	<ref bean="u"/>
  	 </constructor-arg>
  </bean>
  

</beans>

UserService.java:

package com.bjsxt.service;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;



public class UserService {
	
	private UserDAO userDAO;  
	
	public void init() {
		System.out.println("init");
	}
	
	public void add(User user) {
		userDAO.save(user);
	}
	public UserDAO getUserDAO() {
		return userDAO;
	}
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}
	
	public UserService(UserDAO userDAO) {
		super();
		this.userDAO = userDAO;
	}
	
	public void destroy() {
		System.out.println("destroy");
	}
}

UserServiceTest.java:

package com.bjsxt.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bjsxt.model.User;

//Dependency Injection
//Inverse of Control
public class UserServiceTest {

	@Test
	public void testAdd() throws Exception {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		
		
		UserService service = (UserService)ctx.getBean("userService");
		UserService service2 = (UserService)ctx.getBean("userService");
		
		ctx.destroy();
		
	}

}

  

结果init, init

去掉scope="prototype", 结果就是init, destroy  

  

转载于:https://www.cnblogs.com/wujixing/p/5454029.html

### 如何下载 Spring-Aspects 库 #### 1. Maven 中央仓库获取 如果项目使用 Maven 构建工具,则可以在 `pom.xml` 文件中添加以下依赖项以引入 `spring-aspects`: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.20</version> <!-- 替换为所需版本 --> </dependency> ``` 此操作会自动从 Maven 中央仓库下载对应的 `spring-aspects` 版本[^2]。 --- #### 2. Gradle 构建工具配置 对于基于 Gradle 的项目,可以通过在 `build.gradle` 文件中添加如下内容实现依赖管理: ```groovy dependencies { implementation 'org.springframework:spring-aspects:5.3.20' // 替换为所需版本 } ``` 执行 `gradle build` 或者 `./gradlew build` 后即可完成库的下载和集成[^4]。 --- #### 3. 手动下载 JAR 包 如果不希望通过构建工具自动化处理,可以直接访问 [Maven Central Repository](https://search.maven.org/) 并手动查找对应版本的 `spring-aspects`。具体步骤如下: - 访问链接:[Spring Aspects on Maven Central](https://search.maven.org/artifact/org.springframework/spring-aspects/) - 下载所需的 `.jar` 文件并将其放置于项目的 `libs` 目录下。 - 如果 IDE 支持本地库管理功能(如 IntelliJ IDEA),则需将该路径注册至项目设置中[^1]。 --- #### 4. 编译源码获得自定义版本 当需要调试或者修改核心逻辑时,可以从官方 Git 仓库克隆完整的 Spring Framework 源码,并单独编译 `spring-aspects` 模块。以下是基本流程: 1. **克隆源码** ```bash git clone https://github.com/spring-projects/spring-framework.git cd spring-framework ``` 2. **切换目标分支** 切换到指定标签或分支(例如 v5.3.20): ```bash git checkout v5.3.20 ``` 3. **调整镜像地址** 修改 `build.gradle` 文件中的仓库列表,加入国内加速站点以便提升速度: ```gradle repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenCentral() } ``` 4. **预编译 oxm 模块** 根据文档提示运行初始化脚本: ```bash ./gradlew :spring-oxm:compileTestJava ``` 5. **卸载冲突模块** 在 IDE 中右键单击 `spring-aspects` 模块,选择 “Unload Module”,从而避免与其他组件发生兼容性问题[^5]。 6. **打包产物** 使用以下命令生成最终的 JAR 文件供后续测试调用: ```bash ./gradlew clean assemble ``` 完成后可在 `build/libs/` 路径下找到生成的目标文件。 --- ### 注意事项 由于 AspectJ 工具链的存在,某些场景可能引发额外复杂度。比如尝试启用 `AdviceMode.ASPECTJ` 方式时,必须确保 JVM 参数正确传递 `-javaagent:<path-to>/aspectjweaver.jar`[^4]。 此外,部分开发者反馈因缺少特定子包支持而导致编译失败的情况,这通常涉及缓存扩展机制下的类缺失问题[^3]。此时应仔细核对所选框架版本是否满足最低需求标准。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值