Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов
Статьи по Теме
Весенняя серия:Весенняя серия
предисловие
- Весна - этолегкийизИнверсия контроля(МОК) илицом к лицу(АОП) фреймворк.
- Адрес официального сайта:официальный сайт весны
- Гитхаб:GitHub
- Адрес загрузки всех версий:ссылка на скачивание
Происхождение МОК
1.1 Смоделируйте обычный бизнес-процесс запроса информации:
① Слой картографа: поскольку нет подключения к базе данных, здесь мы пишем класс реализации картографа для имитации запроса данных.
public interface PerMapper {
void getPerInfo();
}
public class StudentMapperImpl implements PerMapper {
@Override
public void getPerInfo() {
System.out.println("我是一个学生");
}
}
②Служебный уровень: роль сервиса заключается в запросе информации о людях.
public interface PersonService {
void getPersonInfo();
}
public class PersonServiceImpl implements PersonService {
private PerMapper studentMapper = new StudentMapperImpl();
@Override
public void getPersonInfo() {
studentMapper.getPerInfo();
}
}
③Слой контроллера
import service.PersonService;
import service.impl.PersonServiceImpl;
public class IOCTest {
public static void main(String[] args) {
PersonService service = new PersonServiceImpl();
service.getStudentInfo();
}
}
④ Результат выполнения следующий:
1.2 Несколько типов запросов
①mapper, добавить класс реализации учителя
public class TeacherMapperImpl implements PerMapper {
@Override
public void getPerInfo() {
System.out.println("我是一个老师");
}
}
②Что делать, если мы одновременно запрашиваем информацию об учителях и учениках?
public class PersonServiceImpl implements PersonService {
private PerMapper student = new StudentMapperImpl();
private PerMapper teacher = new TeacherMapperImpl();
@Override
public void getPersonInfo() {
student.getPerInfo();
teacher.getPerInfo();
}
}
③Результат выполнения:④ Что, если требования снова изменятся? Что, если мне нужна только информация учителя? Излишне говорить: два подхода, Один из них - напрямую изменить getPersonInfo() PersonServiceImpl.
@Override
public void getPersonInfo() {
// student.getPerInfo();
teacher.getPerInfo();
}
Второй — расширить интерфейс сервисного уровня и предоставить учителям и учащимся интерфейсы для запросов:
public interface PersonService {
void getPersonInfo();
void getPersonInfo1();
}
public class PersonServiceImpl implements PersonService {
private PerMapper student = new StudentMapperImpl();
private PerMapper teacher = new TeacherMapperImpl();
@Override
public void getPersonInfo() {
teacher.getPerInfo();
}
@Override
public void getPersonInfo1() {
student.getPerInfo();
}
}
⑤ Похоже, проблем нет, верно? Что, если есть 100 типов людей? Если вам нужно изменить это, люди сойдут с ума. Это определенно неразумно!
1.3. Оптимизируйте метод запроса
①Умные дети могут подумать об удалении объекта запроса: добавитьset()Метод не реализует интерфейс, а только выполняет зарезервированную работу.
public class PersonServiceImpl implements PersonService {
private PerMapper per;
public void setPer(PerMapper per) {
this.per = per;
}
@Override
public void getPersonInfo() {
per.getPerInfo();
}
}
②Реализация уровня контроллера:
public class IOCTest {
public static void main(String[] args) {
PersonServiceImpl service = new PersonServiceImpl();
//学生
service.setPer(new StudentMapperImpl());
service.getPersonInfo();
//老师
service.setPer(new TeacherMapperImpl());
service.getPersonInfo();
}
}
③Вывод: Таким образом, инициатива передается вызывающей стороне, и программе не нужно заботиться о том, как она создается или реализуется, она отвечает только за предоставление интерфейса.
- Мы больше не управляем созданием объектов, а больше внимания уделяем реализации бизнеса, и сцепление сильно снижается, что является прототипом МОК!
1.4, сущность МОК
- Инверсия управления — это способ создания или извлечения определенных объектов по описанию (XML или аннотации) и третьими лицами. Именно контейнер IOC реализует инверсию управления в Spring, а его метод реализации — внедрение зависимостей (DI).
Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрить блоггеров~