Aru*_*ran 3 java spring constructor autowired
我正在学习Springs
注释和自动接线。我尝试了三种类型的自动接线
这是我的配置
<?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">
<!-- add entry for component scanning -->
<context:component-scan base-package="com.aht.spring.entity"></context:component-scan>
</beans>
Run Code Online (Sandbox Code Playgroud)
这些是我的实体
教练
package com.aht.spring.entity.coach;
public interface Coach {
String getDailyWorkOut();
String getDailyFortune();
}
Run Code Online (Sandbox Code Playgroud)
财富服务
package com.aht.spring.entity.fortune;
public interface FortuneService {
String getFortune();
}
Run Code Online (Sandbox Code Playgroud)
快乐财富服务
package com.aht.spring.entity.fortune;
import org.springframework.stereotype.Component;
@Component
public class HappyFortuneService implements FortuneService {
public String getFortune() {
return "Feel energetic for first half of trainning";
}
}
Run Code Online (Sandbox Code Playgroud)
足球教练
package com.aht.spring.entity.coach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.aht.spring.entity.fortune.FortuneService;
@Component
public class FootBallCoach implements Coach {
private FortuneService fortuneService;
@Autowired
public FootBallCoach(FortuneService fortuneService) {
this.fortuneService = fortuneService;
}
public String getDailyWorkOut() {
return "Practice one-on-one for 2 hours";
}
public String getDailyFortune() {
return fortuneService.getFortune();
}
}
Run Code Online (Sandbox Code Playgroud)
板球教练
package com.aht.spring.entity.coach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.aht.spring.entity.fortune.FortuneService;
@Component
public class CricketCoach implements Coach {
private FortuneService fortuneService;
public CricketCoach() {
System.out.println("Default constructor");
}
@Autowired
public void setFortuneService(FortuneService fortuneService) {
this.fortuneService = fortuneService;
}
public String getDailyWorkOut() {
return "Practice out field tips";
}
public String getDailyFortune() {
return fortuneService.getFortune();
}
}
Run Code Online (Sandbox Code Playgroud)
棒球教练
package com.aht.spring.entity.coach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.aht.spring.entity.fortune.FortuneService;
@Component
public class BaseBallCoach implements Coach {
private FortuneService fortuneService;
public String getDailyWorkOut() {
return "Practice curve whole day";
}
public String getDailyFortune() {
return fortuneService.getFortune();
}
@Autowired
public void customAutoWire(FortuneService fortuneService) {
this.fortuneService = fortuneService;
}
}
Run Code Online (Sandbox Code Playgroud)
我有三个用于执行三种自动接线方式的类,Constructor和Setter可以正常工作,但是当method
明智的自动接线完成时,就会调用错误的构造器。我在BaseBallCoach
课堂上错过的一件事是默认构造函数,但是无论如何,编译器会自动为我生成一个吗?
这是我的CoachMethodInjectionApp.java,在其中执行方法自动接线
package com.aht.spring.app;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.aht.spring.entity.coach.Coach;
public class CoachMethodInjectionApp {
public static void main(String[] args) {
// read config-file
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// get beans
Coach coach = context.getBean("baseBallCoach", Coach.class);
// get dependencies
System.out.println(coach.getDailyFortune());
// get daily workout
System.out.println(coach.getDailyWorkOut());
// close context
context.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出
Default constructor
Feel energetic for first half of trainning
Practice curve whole day
Run Code Online (Sandbox Code Playgroud)
输出的第一行是我不懂的Default constructor
,为什么要CricketCoach
执行构造函数?
小智 6
由于CricketCoach
类都被注解@Component
和包被扫描时,Spring容器启动时,它会创建类型的实例,CricketCoach
通过调用无参数的构造函数
xml文件中定义的所有带有注解@Component
或@Component
从扫描到的包进行任何扩展的Bean 都会在spring容器的启动时间创建,无论是否使用它们
归档时间: |
|
查看次数: |
113 次 |
最近记录: |