当前位置: 首页 > 知识库问答 >
问题:

为什么函数没有被触发?

戚衡
2023-03-14

我正在学习Java,正在使用java 8,spring 5.3.9和Apache Tomcat 9。我已经将我的jar文件添加到我的构建路径中的类路径中,将Apache Tomcat添加到我的服务器中,我的项目运行得非常好。现在我开始使用beans和xml文件,我遇到了一个问题。我的代码的一部分被触发,另一部分被忽略。

我有以下界面

FortuneService.java:

package com.luv2code.springdemo;

public interface FortuneService {

    public String getFortune();
}

和一个快乐财富服务类:

package com.luv2code.springdemo;

public class HappyFortuneService implements FortuneService {
    
    @Override
    public String getFortune() {
        return "Today is your lucky day";
    }

}

这是另一个接口Coach.java:

package com.luv2code.springdemo;

public interface Coach {
    
    public String getDailyWorkout();
    
    public String getDailyFortune();
}

这是我的棒球教练课:

package com.luv2code.springdemo;

public class BaseballCoach implements Coach {
    
    private FortuneService fortuneService;
    
    public BaseballCoach(FortuneService theFortuneService) {
        this.fortuneService = theFortuneService;
    }
    
    @Override
    public String getDailyWorkout() {
        return "Spend 30 min on batting practice";
    }

    @Override
    public String getDailyFortune() {
        
        return fortuneService.getFortune();
    }
    
}

轨道客车等级:

package com.luv2code.springdemo;

public class TrackCoach implements Coach {
    
    private FortuneService fortuneService;
    
    public TrackCoach() {}
    
    public TrackCoach(FortuneService fortuneService) {
        super();
        this.fortuneService = fortuneService;
    }

    @Override
    public String getDailyWorkout() {
        
        return "Run a hard 5k";
    }
    
    @Override 
    public String getDailyFortune() {
        return fortuneService.getFortune();
        
    }
    

}

MyApp.java:

package com.luv2code.springdemo;

public class MyApp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Coach theCoach = new TrackCoach();
        
        System.out.println(theCoach.getDailyWorkout());

    }

}

MyLoggerConfig.java:

package com.luv2code.springdemo;
 
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class MyLoggerConfig {
 
    private String rootLoggerLevel;
    private String printedLoggerLevel;
    
    public void setRootLoggerLevel(String rootLoggerLevel) {
        this.rootLoggerLevel = rootLoggerLevel;
    }
 
    public void setPrintedLoggerLevel(String printedLoggerLevel) {
        this.printedLoggerLevel = printedLoggerLevel;
    }
 
    public void initLogger() {
 
        // parse levels
        Level rootLevel = Level.parse(rootLoggerLevel);
        Level printedLevel = Level.parse(printedLoggerLevel);
        
        // get logger for app context
        Logger applicationContextLogger = Logger.getLogger(AnnotationConfigApplicationContext.class.getName());
 
        // get parent logger
        Logger loggerParent = applicationContextLogger.getParent();
 
        // set root logging level
        loggerParent.setLevel(rootLevel);
        
        // set up console handler
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setLevel(printedLevel);
        consoleHandler.setFormatter(new SimpleFormatter());
        
        // add handler to the logger
        loggerParent.addHandler(consoleHandler);
    }
    
}

和我的xml文件applicationContext.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.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- Define your beans here -->
    
    <bean id="myLoggerConfig" class="com.luv2code.springdemo.MyLoggerConfig" init-method="initLogger">
        <property name="rootLoggerLevel" value="FINE" />
        <property name="printedLoggerLevel" value="FINE"/>
    </bean>
    
    <bean
    id="myFortune"
    class="com.luv2code.springdemo.HappyFortuneService"
    >    
    </bean>
    
    <bean 
    id="myCoach"
    class="com.luv2code.springdemo.TrackCoach"
    > 
        <constructor-arg ref="myFortune" />
    </bean>
    
</beans>

我遇到的问题是,在我的控制台中打印出消息< code>Run a hard 5k,而不是< code>Today is your lucky day消息,并且我期望的红色xml控制台消息没有被记录。所以我认为我的xml文件和接口被忽略了。

我还尝试在MyApp.java中插入以下行:

System.out.println(theCoach.getDailyFortune());

但我知道this.fortuneService为空

共有1个答案

敖硕
2023-03-14

您需要从使用XML文件构建的上下文中获取bean,而不是使用new关键字创建它们。

package com.luv2code.springdemo;

public class MyApp {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    Coach theCoach = context.getBean("myCoach", Coach.class);
    
    System.out.println(theCoach.getDailyWorkout());
    System.out.println(theCoach.getDailyFortune());

}

}

 类似资料:
  • wanner测试spring boot(1.5.20)aop(最小代码) 类被aopped时, 请让我知道我错过了什么

  • 我的编译器是和。 输出如下: 具有线程本地存储持续时间的对象的析构函数...保证被调用。

  • 我有: null null null 允许的HTTP方法:, 授权级别:函数 我也用下面的测试代码尝试了相同的结果。它与软件公司提供的样例有效载荷数据更接近: 我所尝试的

  • 可能重复:< br >什么是复制省略和返回值优化? 我很难理解为什么在下面的代码中没有调用复制构造函数。 有人能解释一下为什么只调用构造函数,不调用复制构造函数吗?< br >谢谢。

  • 我有一个C++实验室,问题是:用户应该为X输入一个值(X是所持有的测试数)。如果x<15,程序不计算任何东西。如果X在16和30之间,程序应计算C=1.0/10.0*(24a);如果X>30,程序应计算C=0.15(24*a)。我的multiple if代码可以工作,但是当我输入X的值时,方程没有解出。有人知道吗??

  • 在JavaScript中,我按住两个键,并且被完美触发。当我释放其中一个键时,被触发。到目前为止一切都很好。但是我仍然按住一个键,那么为什么没有被触发呢?我需要在我的游戏中发生这种情况。我做错了什么吗?这是预期的反应吗?有什么解决办法吗?