Please enable JavaScript.
Coggle requires JavaScript to display documents.
Inversion of Control (IoC) là một mô hình lập trình phần mềm mà các đối…
Inversion of Control (IoC) là một mô hình lập trình phần mềm mà các đối tượng sẽ được đăng ký và quản lý bởi một bộ điều khiển (container), từ đó các đối tượng sẽ lấy thông tin và sử dụng các đối tượng cần thiết
Ưu điểm
khả năng test dễ dàng
tăng cường kỹ năng tái sử dụng
giảm thiểu tình trạng code duplicate
cải thiện tính bảo mật
tăng cường khả năng mở rộng của hệ thống
Spring sử dụng IoC để quản lý các đối tượng của ứng dụng, bao gồm tất cả các phụ thuộc của chúng bằng cách tạo chúng khi cần thiết (IoC), sau đó cung cấp chúng cho các đối tượng khác thông qua DI
-> Spring container (applicationContext)
Dependency Injection (DI) là một kỹ thuật lập trình mà khi một đối tượng được tạo ra, các phụ thuộc của nó sẽ được cung cấp bởi một người quản lý bên ngoài
khai báo các đối tượng phụ thuộc của một đối tượng -> Spring tạo ra các đối tượng này và cung cấp chúng cho đối tượng mà bạn đang tạo
Constructor Injection
sử dụng để inject phụ thuộc FortuneService
cho phép lớp BaseballCoach truy cập các phương thức và thuộc tính của đối tượng FortuneService
Định nghĩa về Dependency interface và class
public interface FortuneService {
public String getFortune();}
public class HappyFortuneService implements FortuneService{
Override
public String getFortune() {
return "Today is your lucky day!";}}
Tạo constructor trong lớp Java dành cho việc injection
public class BaseballCoach implements Coach {
// Định nghĩa trường FortuneService
private FortuneService fortuneService;
// Định nghĩa ra constructor (hàm tạo) dành cho việc DI
public BaseballCoach(FortuneService theFortuneService){
fortuneService = theFortuneService;}}
Cấu hình cho DI trong file xml tương ứng
<bean id = "myFortune" class="com.luv2code.springcoredemo.HappyFortuneService">
</bean>
<bean id = "myCoach" class="com.luv2code.springcoredemo.BaseballCoach">
<constructor-arg ref="myFortune" />
</bean>
Setter Injection
phụ thuộc được khởi tạo và cấu hình bên ngoài đối tượng tại thời điểm chạy
cấu hình phụ thuộc có thể linh hoạt hơn và đơn giản hơn so với Constructor Injection
sử dụng các annotation như
Autowired
và
Value
Tạo một Spring Bean
đánh dấu lớp này bằng
Component
và các dependency của nó bằng các annotation như
Autowired,
Value
hoặc
Qualifier
Tạo các Setter method
public void setFortuneService(FortuneService fortuneService) {
System.out.println("CricketCoach: inside setter method - setFortuneService");
this.fortuneService = fortuneService;}
Cấu hình Bean
<bean id = "myCricketCoach" class="com.luv2code.springcoredemo.CricketCoach">
<property name="fortuneService" ref="myFortune" />
</bean>
Kích hoạt Setter Injection
sử dụng các annotation như
Autowired,
Inject
hoặc
Resource
Field Injection
giúp cho việc cung cấp giá trị cho các thuộc tính của một bean trở nên dễ dàng hơn
Tạo phương thức setter trong class dành cho injection
private String emailAddress; private String team;
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;}
public void setTeam(String team) {
this.team = team;}
Cấu hình file xml cho việc injection
<bean id = "myCricketCoach" class="com.luv2code.springcoredemo.CricketCoach">
<property name="fortuneService" ref="myFortune" />
<property name="emailAddress" value="thebestcoach@luv2code.com"/>
<property name="team" value="Sunrisers Hyderabad" />
</bean>
thông qua file XML
thông qua Java Annotation
thông qua Java Source Code
Quá trình PT Spring
create spring container
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"... <bean id = "myCoach" class="com.luv2code.springdemo.BaseballCoach">
</bean>
</beans>
retrieve bean from container
public class HelloSpringApp {
public static void main (String[]args) {
// load the spring configuration file
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//retrieve bean from container
Coach theCoach = context.getBean("myCoach", Coach.class);
System.out.println(theCoach.getDailyWorkout());
context.close();}}
configure spring bean