Файл конфигурации
В предыдущих примерах мы использовали определение фасоли XML для настройки компонентов. В немного большем проекте обычно существуют сотни компонентов. Если эти компоненты настроены с использованием определений XML Beans, это, очевидно, увеличит размер файла конфигурации, что делает его не очень удобным для поиска и обслуживания.
Spring 2.5 представляет для нас механизм автоматического сканирования компонентов. Он может найти классы, аннотированные с аннотациями @Component, @Service, @Controller и @Repository в рамках пути класса, и включать эти классы в контейнер для весеннего.
Его функция такая же, как и использование компонентов конфигурации узла бобов в файлах 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.spramework.org/schema/beans/springbeans.s.xsspring.s.s.xspring.s.xspring.s.spring.s.spring.s.s.spring.s.spring.s.spring.s.spers.s.spring.s.spring.s.spers.s.spers.s.spring.s.spers.s.spers.s.spersbembembems. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <Контекст: component-can base-package =" cn.itcast "/> </beans>
<context:component-scan base-package="cn.itcast" /> неявно регистрирует несколько процессоров, которые анализируют аннотации, включая процессор <context: annotation-config />, зарегистрированные в конфигурации, то есть, если <context:component-scan base-package="cn.itcast" /> конфигурация, это не требует, чтобы <context:annotation-config/> configration. Кроме того, базовая упаковка представляет собой пакет (подпакун), который необходимо сканировать.
аннотация
@Service используется для аннотирования компонентов бизнес -уровня, @Controller используется для аннотации компонентов управляющего уровня (например, действие в Struts2), а @Repository используется для аннотирования компонента доступа к данным, то есть компонентом DAO. @Component относится к компонентам. Когда компоненты нелегко классифицировать, мы можем использовать эту аннотацию для аннотации.
Эта статья основана на случае аннотации @autowire и автоматической сборки.
Сначала мы меняем файл конфигурации Spring:
<? 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.spramework.org/schema/beans/springbeans.s.xsspring.s.s.xspring.s.xspring.s.spring.s.spring.s.s.spring.s.spring.s.spring.s.spers.s.spring.s.spring.s.spers.s.spers.s.spring.s.spers.s.spers.s.spersbembembems. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <Контекст: component-can base-package =" cn.itcast "/> </beans>
Пример
Затем используйте аннотацию @Service, чтобы аннотировать класс Personervicebean, следующим образом:
@ServicePublic Class Personservicebean реализует Personservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void said () {persondao.add (); }}Аннотировать класс Persondaobean с помощью аннотации @Repository, следующим образом:
@RepositoryPublic Class Persondaobean реализует Persondao {@Override public void add () {System.out.println ("выполнить метод add () в Persondaobean"); }}Наконец, мы изменяем код класса Springtest на:
открытый класс Springtest {@Test public void eMancePring () {AbstractApplicationContext ctx = new classpathxmlapplicationcontext ("beans.xml"); Лица Личносления = (Человек) CTX.GETBEAN ("Personservicebean"); Persondao persondao = (persondao) ctx.getbean ("persondaobean"); System.out.println (Personservice); System.out.println (Persondao); ctx.close (); }}Проверьте метод экземпляра ppring (), и вы увидите, что консоль Eclipse Prints:
Если мы хотим использовать указанное имя, чтобы получить его, мы можем изменить код класса Personservicebean на:
@Service ("Personservice") открытый класс Personservicebean реализует Personservice {Private Persondao Persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void said () {persondao.add (); }}Таким образом, код класса Springtest должен быть изменен на:
открытый класс Springtest {@Test public void eMancePring () {AbstractApplicationContext ctx = new classpathxmlapplicationcontext ("beans.xml"); Лица Личносения = (Человек) CTX.GETBEAN ("Personservice"); System.out.println (Personservice); ctx.close (); }}Проверьте метод экземпляра ppring (), и вы увидите, что консоль Eclipse Prints:
Раньше мы узнали о масштабах бобов, управляемых весной, и мы можем знать, что масштаб двух бобов, управляемых весной, по умолчанию. Конечно, мы также можем изменить объем бобов, управляемых пружиной, такие как изменение кодекса класса Personservicebean на:
@Service ("Personservice") @Scope ("Прототип") открытый класс лицвисбейный подборник реализует лиц консервис {частный persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void said () {persondao.add (); }}Это означает, что масштаб лица, управляемого Personservicebean, управляемым весной, стал прототипом. В настоящее время мы изменяем код класса Springtest на:
открытый класс Springtest {@Test public void eMancePring () {AbstractApplicationContext ctx = new classpathxmlapplicationcontext ("beans.xml"); Personservice Personservice1 = (Personservice) ctx.getbean ("Personservice"); Personservice Personservice2 = (Personservice) ctx.getbean ("Personservice"); System.out.println (Personservice1 == Personservice2); ctx.close (); }}Проверьте метод экземпляра ppring (), и вы увидите, что консоль Eclipse Prints:
Применение прототипа означает, что каждый раз, когда вы получаете боб из пружинного контейнера, это новый объект.
Если компоненты включены в пружинный контейнер путем автоматического сканирования по пути пути класса, как указать метод инициализации и метод разрушения бобов? В настоящее время нам нужно использовать две аннотации: @postconstruct и @predestroy. Для экспериментов мы изменили код класса Personervicebean на:
@Service ("Personservice") открытый класс Personservicebean реализует Personservice {Private Persondao Persondao; @Postconstruct public void init () {System.out.println ("инициализировать ресурс"); } @Predestroy public void destress () {System.out.println ("Drester, Close Resource"); } public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void said () {persondao.add (); }}Далее нам нужно изменить код класса Springtest на:
открытый класс Springtest {@Test public void eMancePring () {AbstractApplicationContext ctx = new classpathxmlapplicationcontext ("beans.xml"); Лица Личносения = (Человек) CTX.GETBEAN ("Personservice"); ctx.close (); }}Таким образом, тестируйте метод экземпляра ppring (), и консоль Eclipse будет печатать:
Чтобы просмотреть исходный код, нажмите, чтобы позволить Spring автоматически сканировать и управлять бобами для загрузки.
Суммировать
Выше приведено автоматический пакет Spring Scan, представленный редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!