Нужна помощь, чтобы понять Аннотации - Аннотации Spring

Я пытаюсь изучить 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
    }
}

Редактировать 1

Чтобы попытаться преобразовать вышеупомянутое, я прохожу через эти два простых примера:

Ex1: http://jroller.com/habuma/entry/reeding_xml_with_spring_2

Ex2: http://www.theserverside.com/tutorial/Spring-Without- XML-The-Basics-of-Spring-Annotations-vs-Spring-XML-Files

Я вроде понимаю примеры в первом URL, но второй меня немного смутил. В примере во втором URL-адресе какова цель класса SummaryConfig ? Похоже, что класс SummaryConfig является Java-версией XML-файла. В первом примере такой подход не использовался. В чем разница между ними?

Может ли быть так, что при использовании аннотаций вы можете поместить детали конфигурации в класс Java (например, SummaryConfig ), и вы также можете поместить аннотации в сами bean-компоненты. как в примерах в первом URL?

Спасибо

Редактировать 2

Вот что я сделал до сих пор,

Я изменил 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;
        }   
    }

Думаю, я прав в том, что никакие аннотации не требуются ни для одного из других классов.

Спасибо

5
задан ziggy 16 January 2012 в 17:26
поделиться