spring实现在一个类中调用另一个类的方法

bean.xml的配置信息:

<?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-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 这一步是创建类的对象,注意:此时已经创建好了 spring1 的对象,并不是在 context.getBean 的时候才创建对象,getBean 只是获取对象的地址,并赋值给一个引用-->
<bean id="bean1" class="com.mx.ioc.spring1">
<!-- 这一步是为属性注入值
	constructor-arg:构造参数方法注入,name属性是所要注入的属性名称,value属性是所要注入的属性值
	property: set 方法注入,name属性是所要注入的属性名称,value属性是所要注入的属性值,ref表示引用另一个对象
 -->
	<constructor-arg name="username" value="maxiao"></constructor-arg>
	<property name="username2" value="maxiao2"></property>
	<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.mx.ioc.UserDao">
</bean>

<!-- 注解的方式实现IOC -->
<context:component-scan base-package="com.mx.ioc"></context:component-scan>
</beans>

UserDao类:

package com.mx.ioc;

import org.springframework.stereotype.Component;

@Component(value="userdao")
public class UserDao {

	public String username3;

	public void add(){
		System.out.println("UserDao's add method");
	}
	public void setUsername3(String username3) {
		this.username3 = username3;
	}
	
}

Spring1 类,在spring1类中利用创建好的 userdao 对象,调用 UserDao 类里面的 add 方法:

package com.mx.ioc;

public class spring1 {
	
	public String username;
	public String username2;
	public UserDao userDao;
	

	public spring1(String username){
		this.username = username;
	}
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public void setUsername2(String username2){
		this.username2=username2;
	}
	public void add(){
		System.out.println("add....");
		userDao.add();//调用 UserDao 里面的方法
	}
	
}

测试程序:

package com.mx.ioc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class testIOC {

	public void testspring1(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("bean1.xml");
		spring1 s = (spring1) ac.getBean("bean1");  //创建Spring1的对象
		s.add();
		System.out.println(s.username);
		System.out.println(s.username2);
	}
	
	public static void main(String[]args){
		testIOC t = new testIOC();
		t.testspring1();
		
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当在同一个类中方法相互调用时,如果希望事务能够生效,可以采取以下解决办法: 1. 使用代理调用方法:由于Spring事务管理是通过AOP代理实现的,所以可以通过使用代理对象调用方法来触发事务管理。可以通过将方法调用委托给代理对象来确保事务的生效。 2. 将被调用方法抽取到另一个类中:将被调用方法抽取到另一个类中,并确保在被调用方法上添加@Transactional注解。这样,在调用方法调用被抽取的方法时,事务将能够生效。 3. 使用AspectJ模式的事务管理:Spring还提供了AspectJ模式的事务管理,可以在同一个类中方法相互调用时保持事务的生效。通过配置AspectJ的切面来实现事务的管理,可以细粒度地控制事务的传播行为和回滚条件。 需要注意的是,以上解决办法需要根据具体情况选择合适的方式,并确保在调用方法上正确地添加@Transactional注解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spring中同一个service中方法相互调用事务不生效问题解决方案](https://blog.csdn.net/a1036645146/article/details/107469578)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micrle_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值