Предисловие
При обычной разработке Java программисты должны полагаться на другие классы в определенном классе, поэтому они обычно используют new для нового класса, а затем вызовут экземпляры класса. Проблема с этой разработкой заключается в том, что new экземпляры класса нелегко управлять. Spring предлагает идею инъекции зависимости, то есть классы зависимости не создаются программистами, но помогают нам new экземпляры через пружинные контейнеры и вводить экземпляры в класс, который нуждается в объекте. Другим термином для инъекции зависимостей является «контрольная инверсия». Общее понимание: обычно мы new на экземпляре, и контроль этого экземпляра является нашим программистом, а инверсия управления означает, что работа new экземпляра не выполняется американскими программистами, но передается контейнеру пружины.
Есть четыре способа внедрить зависимость весной
1. Установите инъекцию (обычно также называется инъекцией атрибутов)
2. Инъекция конструктора
3. Инъекция интерфейса (это в основном не используется сейчас)
4. Инъекция аннотации (@autowire)
Ниже приведен пример использования установленного метода введения метода, инъекции конструктора и инъекции аннотации.
1. Установите впрыск метода (инъекция атрибута)
Userdao.java
открытый класс userdao {public void insertuser (пользователь пользователя) {// Определенная логика опущена}}Userservice.java
public interface userservice {void insertuser (пользователь пользователя);}Userserviceimpl.java
открытый класс пользователи urserviceimpl реализует userservice {private userdao userdao; public void setUserdao (userdao userdao) {this.userdao = userdao; } public void insertUser (пользователь пользователя) {userDao.insert (user); }}Файл конфигурации пружины
<? 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-Пропустить некоторые не связанные с конфигурацией написание-> <bean id = userdao"> </bean> <bean идентификато name = "userDao" ref = "userDao"> </bean> </beans>
Приведенное выше может внедрить userdao в userserviceimpl
2. Инъекция конструктора
User.java
Пользователь открытого класса {// Для простоты напишите два атрибута частного имени строки; частный целый возраст; // Опустите метод getter/setter о имени, возрастном общественном пользователе (string name, int age) {this.name = name; this.age = возраст; }}Теперь используйте файл конфигурации 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.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd " параметры)-> <constructor-arg type = "java.lang.string" index = "0" value = "Zhangsan"/> <constructor-arg type = "java.lang.integer" index = "1" value = "20> </bean> </beans>
Выше приведено вводить значения свойства в объект пользователя. Конечно, если вы хотите ввести пример, используя метод SET, он на самом деле одинаково. Необходимо иметь конструктор в UserServiceImpl , а формальные параметры являются пользователями, поэтому нет необходимости в методе setter .
Тогда написание файла конфигурации пружины должно быть изменено на это
<? 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-Пропустить некоторые не связанные с конфигурацией написание-> <bean id = userdao"> </bean> <bean> "! Параметры конструктора начинаются с 0 (избегайте нескольких конструкторов, имеющих одинаковое количество параметров)-> <constructor-arg index = "0" ref = "userDao"> </bean> </beans>
Это также может достичь эффекта, достигнутого приведенной выше установленной внедрением метода
3. Аннотация
Я никогда не пробовал, может ли это быть успешно @Autowire без добавления @Component,@Service,@Controller и т. Д. В эти классы. Тем не менее, рекомендуется добавлять соответствующие аннотации к соответствующему уровню. В следующем примере userDao принадлежит к модульскому слою. Весной вы можете использовать аннотацию @Component .
Userdao.java
@Componentpublic class userdao {public void insertuser (пользователь пользователя) {// Специальная логика опущена}}Userservice.java
public interface userservice {void insertuser (пользователь пользователя);}Userserviceimpl.java
// Внедрить соответствующий весенний пакет @ServicePublic Class UserserviceImpl реализует userservice {@autowire private userdao userdao; public void insertuser (пользователь пользователя) {userDao.insert (user); }}Соответствующий файл конфигурации пружины
<? 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-Пропустить некоторые несвязанные конфигурационные записи-> <!-* означает, чтобы отсканировать все упаковки. В реальном разработке вы можете сканировать на основе пакетов, включающих компоненты аннотации-> <Контекст: компонент-сканирование Base-package = "*"> <!-Включите компонентное сканирование-> </context: component-scan> <context: annotation-config> <!-Поверните процессор аннотации-> </context: annotation-config> <bean id = "Bean id = "userservice"/> </beans>
Однако в ходе процесса разработки установленная впрыска метода включена, и включена впрыск аннотации, Spring сначала выберет установленную инъекцию, поэтому он не забудет предоставить соответствующий метод установления, в противном случае он потерпит неудачу.
В сравнении, инъекция аннотации гораздо более удобна, чем другие инъекции, и записано меньше файлов кода и конфигурации. Рекомендуется использовать инъекцию аннотаций в процессе разработки.
Суммировать
Выше приведено полное введение в несколько методов инъекции зависимости весной. Я надеюсь, что это может помочь вам в учебе или на работе. Если у вас есть какие -либо вопросы, вы также можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.