Я пытаюсь изучить Spring и Hibernate, и мне очень трудно понять аннотации и то, как они работают. Большинство примеров, которые я вижу в Интернете, являются примерами на основе аннотаций, поэтому мне нужно сначала понять, как работают аннотации, прежде чем я смогу изучить Spring или Hibernate
. У меня есть представление о том, что это такое и для чего они используются. Я знаю, что они заменяют конфигурацию xml. Т.е. Вы можете настроить bean-компоненты непосредственно в Java-коде с помощью аннотаций. Я не понимаю, как их использовать и когда их можно использовать.
Пытаясь понять, как это можно сделать, я думаю, было бы полезно, если бы я увижу разницу между ними. У меня есть простая программа Spring. Если бы я должен был преобразовать этот пример программы для использования аннотаций, что мне нужно было бы сделать?
Я хочу сделать это таким образом, потому что программа, которую я предоставил ниже, является той, которую я очень хорошо понимаю (пример из Книга «Весна в действии», которую я сейчас читаю). Если он будет преобразован в версию аннотаций, я получу представление о том, как и где можно использовать аннотации.
Есть предложения?
Заранее спасибо
инструменталист.xml
Интерфейс инструменталиста
package com.sia.ch1.instrumentalist;
public interface Instrument {
void play();
}
Реализация инструменталиста
package com.sia.ch1.instrumentalist;
import com.sia.ch1.performer.PerformanceException;
import com.sia.ch1.performer.Performer;
public class Instrumentalist implements Performer{
private Instrument instrument;
private String song;
public Instrumentalist(){}
public void perform() throws PerformanceException{
System.out.print("Playing " + song + " : ");
instrument.play();
}
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}
public void setSong(String song) {
this.song = song;
}
}
Инструменты - Фортепиано
package com.sia.ch1.instrumentalist;
public class Piano implements Instrument{
public Piano(){}
public void play(){
System.out.println("PLINK PLINK");
}
}
Инструменты - Саксофон
package com.sia.ch1.instrumentalist;
public class Saxophone implements Instrument{
public Saxophone(){}
public void play(){
System.out.println("TOOT TOOT TOOT");
}
}
Основной класс
package com.sia.ch1.instrumentalist;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.sia.ch1.performer.PerformanceException;
import com.sia.ch1.performer.Performer;
public class InstrumentalistApp {
public static void main(String[] args){
ApplicationContext ctx = new FileSystemXmlApplicationContext("c:\\projects\\test\\conf\\instrumentalist.xml");
Performer performer = (Performer) ctx.getBean("kenny");
try {
performer.perform();
} catch (PerformanceException e) {
e.printStackTrace();
}
}
}
Исключение
package com.sia.ch1.performer;
public class PerformanceException extends Exception {
public PerformanceException() {
super();
// TODO Auto-generated constructor stub
}
public PerformanceException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public PerformanceException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public PerformanceException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
Чтобы попытаться преобразовать вышеупомянутое, я прохожу через эти два простых примера:
Ex1: http://jroller.com/habuma/entry/reeding_xml_with_spring_2
Я вроде понимаю примеры в первом URL, но второй меня немного смутил. В примере во втором URL-адресе какова цель класса SummaryConfig
? Похоже, что класс SummaryConfig
является Java-версией XML-файла. В первом примере такой подход не использовался. В чем разница между ними?
Может ли быть так, что при использовании аннотаций вы можете поместить детали конфигурации в класс Java (например, SummaryConfig
), и вы также можете поместить аннотации в сами bean-компоненты. как в примерах в первом URL?
Спасибо
Вот что я сделал до сих пор,
Я изменил XML-документ, чтобы удалить конфигурацию и включить автоматическое сканирование компоненты (Примечание: я изменил имя пакета для измененных версий)
Добавлена аннотация @Component к классам Piano и Saxophone. Я думаю, это говорит контейнеру, что этот класс должен быть включен в классы для автоматического сканирования. Правильно?
package com.sia.ch1.instrumentalist.annotate;
import org.springframework.stereotype.Component;
@Component
public class Piano implements Instrument{
public Piano(){}
public void play(){
System.out.println("PLINK PLINK");
}
}
package com.sia.ch1.instrumentalist.annotate;
import org.springframework.stereotype.Component;
@Component
public class Saxophone implements Instrument{
public Saxophone(){}
public void play(){
System.out.println("TOOT TOOT TOOT");
}
}
Вот где я застрял (класс инструменталистов).
Требуется ли аннотация @Component в этом классе? Или это требуется только в том случае, если на класс нужно ссылаться из другого класса?
Я знаю, что мне нужно @Autowire свойства инструмента и песни, но как мне узнать, хочу ли я автоматически подключать по имени или по типу и т. Д.
Как Могу ли я автоматически подключить свойство String, если в этом классе нет bean-компонента, который его представляет? я.Свойство инструмента будет относиться к классу фортепиано, но с чем будет автоматически связано свойство песни?
package com.sia.ch1.instrumentalist.annotate;
//
import org.springframework.stereotype.Component;
import com.sia.ch1.performer.PerformanceException;
import com.sia.ch1.performer.Performer;
//
@Component
public class Instrumentalist implements Performer{
private Instrument instrument;
private String song;
public Instrumentalist(){}
public void perform() throws PerformanceException{
System.out.print("Playing " + song + " : ");
instrument.play();
}
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}
public void setSong(String song) {
this.song = song;
}
}
Думаю, я прав в том, что никакие аннотации не требуются ни для одного из других классов.
Спасибо