アルンSudhakaran:
私が学んだSprings
の注釈と自動配線で。私は、自動配線の3種類を試してみました
- コンストラクタ
- セッター・インジェクション
- 方法
これは私の設定です
<?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>
これらは私の実体であります
Coach.java
package com.aht.spring.entity.coach;
public interface Coach {
String getDailyWorkOut();
String getDailyFortune();
}
FortuneService
package com.aht.spring.entity.fortune;
public interface FortuneService {
String getFortune();
}
HappyFortuneService
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";
}
}
FootBallCoach
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();
}
}
CricketCoach
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();
}
}
BaseBallCoach
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;
}
}
私は、自動配線の三つの方法を実行するための3つのクラス、コンストラクタとセッターは罰金を働いてきたが、時にmethod
賢明な自動配線が行われた間違ったコンストラクタが呼び出されました。私は私の中で私の中で逃したことの一つBaseBallCoach
のクラスは、デフォルトコンストラクタだったが、とにかくコンパイラが自動的に右私のための1つを生成しますか?
これは私です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();
}
}
これは、出力されました
Default constructor
Feel energetic for first half of trainning
Practice curve whole day
出力の最初の行は、私は理解していないものですDefault constructor
が、なぜコンストラクタ、CricketCoach
実行??
user10386912:
CricketCoach
クラスがでアノテートされ@Component
、パッケージがスキャンされたSpringコンテナは、型のインスタンスを作成します起動時にCricketCoach
引数なしのコンストラクタを呼び出すことにより、
すべての豆xmlファイルに定義されているか、注釈付きで@Component
または任意の拡張子を@Component
スキャンしたパッケージからは関係なく、春のコンテナの開始時に作成されません、彼らが使用される場合はありません