Tôi nghe nhiều về Spring , mọi người đang nói trên web rằng Spring là một khuôn khổ tốt để phát triển web. Chính xác thì Spring Framework để làm gì?
Tôi nghe nhiều về Spring , mọi người đang nói trên web rằng Spring là một khuôn khổ tốt để phát triển web. Chính xác thì Spring Framework để làm gì?
Câu trả lời:
Về cơ bản mùa xuân là một khuôn khổ cho tiêm phụ thuộc đó là một mô hình cho phép xây dựng các hệ thống tách rời.
Ví dụ: giả sử bạn cần liệt kê người dùng của hệ thống và do đó khai báo giao diện có tên UserLister
:
public interface UserLister {
List<User> getUsers();
}
Và có thể một triển khai truy cập cơ sở dữ liệu để có được tất cả người dùng:
public class UserListerDB implements UserLister {
public List<User> getUsers() {
// DB access code here
}
}
Theo quan điểm của bạn, bạn sẽ cần truy cập một thể hiện (chỉ là một ví dụ, hãy nhớ):
public class SomeView {
private UserLister userLister;
public void render() {
List<User> users = userLister.getUsers();
view.render(users);
}
}
Lưu ý rằng mã ở trên không khởi tạo biến userLister
. Chúng ta nên làm gì? Nếu tôi rõ ràng khởi tạo đối tượng như thế này:
UserLister userLister = new UserListerDB();
... Tôi muốn kết hợp quan điểm với việc triển khai lớp truy cập DB. Điều gì xảy ra nếu tôi muốn chuyển từ triển khai DB sang một cái khác lấy danh sách người dùng từ tệp được phân tách bằng dấu phẩy (hãy nhớ, đó là một ví dụ)? Trong trường hợp đó, tôi sẽ đi đến mã của mình một lần nữa và thay đổi dòng trên thành:
UserLister userLister = new UserListerCommaSeparatedFile();
Điều này không có vấn đề gì với một chương trình nhỏ như thế này nhưng ... Điều gì xảy ra trong một chương trình có hàng trăm lượt xem và số lớp kinh doanh tương tự? Việc bảo trì trở thành một cơn ác mộng!
Những gì Spring làm là kết nối các lớp bằng cách sử dụng tệp hoặc chú thích XML, theo cách này, tất cả các đối tượng được khởi tạo và khởi tạo bởi Spring và được chèn vào đúng chỗ (Servlets, Web Frameworks, Business class, DAO, v.v., v.v. ...).
Quay trở lại ví dụ trong Spring, chúng ta chỉ cần có một trình thiết lập cho userLister
trường và có một tệp XML như thế này:
<bean id="userLister" class="UserListerDB" />
<bean class="SomeView">
<property name="userLister" ref="userLister" />
</bean>
hoặc đơn giản hơn là chú thích các tệp trong lớp xem của chúng tôi với @Inject
:
@Inject
private UserLister userLister;
Bằng cách này, khi quan điểm được tạo ra nó một cách kỳ diệu sẽ có UserLister
sẵn sàng làm việc.
List<User> users = userLister.getUsers(); // This will actually work
// without adding any line of code
Nó thật tuyệt! Phải không?
UserLister
giao diện khác của bạn ? Chỉ cần thay đổi XML.UserLister
sẵn một triển khai? Chương trình thực hiện giả thời gian UserLister
và dễ dàng phát triển quan điểm.Có một số tùy chọn khác cho Dependency Injection xung quanh đó, theo ý kiến của tôi đã khiến Spring trở nên nổi tiếng bên cạnh sự đơn giản, thanh lịch và ổn định của nó là các chàng trai của SpringSource đã lập trình nhiều POJO giúp tích hợp Spring với nhiều khung công tác chung khác mà không cần xâm nhập vào ứng dụng của bạn. Ngoài ra, Spring có một số tiểu dự án tốt như Spring MVC, Spring WebFlow, Spring Security và một lần nữa một danh sách loooong của vveteras.
Hi vọng điêu nay co ich. Dù sao, tôi khuyến khích bạn đọc bài viết của Martin Fowler về Dependency Injection và Inversion of Control bởi vì anh ấy làm điều đó tốt hơn tôi. Sau khi hiểu những điều cơ bản, hãy xem Tài liệu mùa xuân , theo tôi, nó được sử dụng để trở thành cuốn sách Mùa xuân hay nhất từ trước đến nay.
Spring chứa ( như Skaffman đã chỉ ra đúng ) một khung MVC. Để giải thích ngắn gọn ở đây là đầu vào của tôi. Spring hỗ trợ phân tách lớp dịch vụ, lớp web và lớp nghiệp vụ, nhưng điều thực sự tốt nhất là "tiêm" các đối tượng. Vì vậy, để giải thích rằng với một ví dụ hãy xem xét ví dụ dưới đây:
public interface FourWheel
{
public void drive();
}
public class Sedan implements FourWheel
{
public void drive()
{
//drive gracefully
}
}
public class SUV implements FourWheel
{
public void drive()
{
//Rule the rough terrain
}
}
Bây giờ trong mã của bạn, bạn có một lớp được gọi là RoadTrip như sau
public class RoadTrip
{
private FourWheel myCarForTrip;
}
Bây giờ bất cứ khi nào bạn muốn một ví dụ của Trip; đôi khi bạn có thể muốn một chiếc SUV khởi tạo FourWheel hoặc đôi khi bạn có thể muốn có Sedan. Nó thực sự phụ thuộc vào những gì bạn muốn dựa trên tình hình cụ thể.
Để giải quyết vấn đề này, bạn muốn có một Mô hình Nhà máy làm mẫu sáng tạo. Trường hợp một nhà máy trả lại đúng ví dụ. Vì vậy, cuối cùng bạn sẽ kết thúc với rất nhiều mã keo chỉ để khởi tạo các đối tượng một cách chính xác. Spring làm công việc mã keo tốt nhất mà không cần mã keo đó. Bạn khai báo ánh xạ trong XML và nó tự động khởi tạo các đối tượng. Nó cũng sử dụng nhiều kiến trúc singleton và giúp tối ưu hóa việc sử dụng bộ nhớ.
Điều này cũng được gọi là Inversion Of Control. Các khuôn khổ khác để làm điều này là Google guice, Pico container, v.v.
Ngoài ra, Spring có khung xác nhận, hỗ trợ rộng rãi cho lớp DAO phối hợp với JDBC, iBatis và Hibernate (và nhiều hơn nữa). Cung cấp kiểm soát giao dịch tuyệt vời đối với các giao dịch cơ sở dữ liệu.
Có rất nhiều điều về Mùa xuân có thể được đọc trong những cuốn sách hay như "Mùa xuân chuyên nghiệp".
Các URL sau cũng có thể giúp ích.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework
Ngày xưa, Spring là một khung tiêm phụ thuộc chỉ hoạt động như ( Guice , PicoContainer , ...), nhưng ngày nay nó là một giải pháp tổng thể để xây dựng Ứng dụng Doanh nghiệp của bạn .
Tiêm phụ thuộc vào mùa xuân, tất nhiên, trái tim của mùa xuân vẫn còn đó (và bạn có thể xem lại các câu trả lời hay khác ở đây), nhưng có nhiều hơn từ mùa xuân ...
Mùa xuân bây giờ có rất nhiều dự án, mỗi dự án có một số dự án phụ ( http://spring.io/projects ). Khi ai đó nói về mùa xuân, bạn phải tìm hiểu xem anh ấy đang nói về dự án mùa xuân nào , đó chỉ là cốt lõi của mùa xuân, được gọi là khung mùa xuân , hay đó là một dự án mùa xuân khác.
Một số dự án mùa xuân đáng được đề cập là:
Nếu bạn cần thêm một số tính năng chỉ định cho ứng dụng của mình, bạn cũng có thể tìm thấy nó ở đó:
Ngoài ra còn có một số dự án nhỏ ở đó, ví dụ như spring-social-facebook ( http://projects.spring.io/spring-social-facebook/ )
Bạn có thể sử dụng mùa xuân để phát triển web vì nó có Spring MVC
mô-đun là một phần của dự án Spring Framework . Hoặc bạn có thể sử dụng mùa xuân với một khung web khác, như struts2 .
Mùa xuân để làm gì? Tôi sẽ trả lời câu hỏi đó ngay, nhưng trước tiên, chúng ta hãy xem xét lại ví dụ của người chiến thắng hugo. Đây không phải là một ví dụ tuyệt vời vì nó không chứng minh sự cần thiết của một khung công tác mới.
public class BaseView {
protected UserLister userLister;
public BaseView() {
userLister = new UserListerDB(); // only line of code that needs changing
}
}
public class SomeView extends BaseView {
public SomeView() {
super();
}
public void render() {
List<User> users = userLister.getUsers();
view.render(users);
}
}
Làm xong! Vì vậy, ngay cả khi bạn có hàng trăm hoặc hàng nghìn lượt xem, bạn vẫn chỉ cần thay đổi một dòng mã, như trong cách tiếp cận Spring XML. Nhưng việc thay đổi một dòng mã vẫn đòi hỏi phải biên dịch lại thay vì chỉnh sửa XML mà bạn nói? Vâng, người bạn khó tính của tôi, sử dụng Ant và script đi!
Vậy mùa xuân để làm gì? Nó được dùng để:
Đọc thêm: http://discuss.joelonsoftware.com/?joel.3.219431.12
UserLister
), nhưng nếu nó cần một số dịch vụ, không được chia sẻ giữa các BaseView
trẻ em khác nhau thì sao? (May mắn thay) không có nhiều kế thừa trong Java.
Mùa xuân là ba điều.
Vấn đề là Spring DI thực sự được cân nhắc kỹ lưỡng, các trình bao bọc xung quanh những thứ khác thực sự được suy nghĩ kỹ ở chỗ những điều khác nghĩ mọi thứ ra ngoài và Spring chỉ đơn giản là kết thúc tốt đẹp. Việc triển khai Spring của MVC và REST và tất cả các công cụ khác không được thực hiện tốt (YMMV, IMHO) nhưng vẫn có trường hợp ngoại lệ (Spring Security là da bom). Vì vậy, tôi có xu hướng sử dụng Spring cho DI, và các trình bao bọc thú vị của nó nhưng thích các công cụ khác cho Web (tôi thích Tapestry rất nhiều), REST (Jersey thực sự mạnh mẽ), v.v.
Những gì bạn có thể muốn trong một ứng dụng web với Spring -
Ngoài ra, Spring rất LỚN - vì vậy có rất nhiều thứ khác bạn có thể quan tâm khi sử dụng trong một ứng dụng web như Spring AOP hoặc Spring Security. Nhưng bốn điều được liệt kê ở trên mô tả các thành phần phổ biến của Spring được sử dụng trong một ứng dụng web.
Tôi thấy hai phần này:
Lưu ý rằng bạn hoàn toàn có thể sử dụng Spring trong một ứng dụng web mà không cần sử dụng Spring MVC. Tôi muốn nói rằng hầu hết các ứng dụng web Java làm điều này, trong khi sử dụng các khung web khác như Wicket, Struts, Seam, ...
Mùa xuân là tuyệt vời để dán các trường hợp của các lớp với nhau. Bạn biết rằng các lớp Hibernate của bạn sẽ luôn cần một nguồn dữ liệu, Spring nối chúng lại với nhau (và cũng có triển khai nguồn dữ liệu).
Các đối tượng truy cập dữ liệu của bạn sẽ luôn cần truy cập Hibernate, Spring kết nối các lớp Hibernate vào DAO cho bạn.
Ngoài ra, Spring về cơ bản cung cấp cho bạn các cấu hình vững chắc của một loạt các thư viện và trong đó, cung cấp cho bạn hướng dẫn về những lib bạn nên sử dụng.
Mùa xuân thực sự là một công cụ tuyệt vời. (Tôi không nói về Spring MVC, chỉ là khung cơ sở).
Câu trả lời được chấp nhận không liên quan đến việc sử dụng chú thích kể từ khi Spring giới thiệu hỗ trợ cho các chú thích khác nhau cho cấu hình.
Có một cách khác để kết nối các lớp cùng với việc sử dụng tệp XML: các chú thích. Hãy dùng ví dụ từ câu trả lời được chấp nhận và đăng ký đậu trực tiếp trên lớp bằng một trong những chú thích @Component
, @Service
, @Repository
hoặc @Configuration
:
@Component
public class UserListerDB implements UserLister {
public List<User> getUsers() {
// DB access code here
}
}
Theo cách này, khi chế độ xem được tạo, nó sẽ có UserLister sẵn sàng hoạt động.
Tuyên bố trên là hợp lệ với một phần thưởng nhỏ không cần sử dụng và sử dụng tệp XML với một chú thích khác @Autowired
tìm thấy một triển khai có liên quan và đưa nó vào.
@Autowired
private UserLister userLister;
Sử dụng @Bean
chú thích trên một phương thức được sử dụng để thực hiện bean để tiêm.
@Bean
chú thích ở cấp độ lớp. Phải là một trong những @Component
, @Service
, @Repository
, vv Nghỉ ngơi là chính xác. Bạn cũng có thể chỉ ra rằng Tự động cài đặt Giao diện theo cách này sẽ chỉ hoạt động nếu chỉ có 1 lớp ứng viên trong đường dẫn phù hợp để tiêm, nếu không thì lỗi ứng dụng Spring.
Ưu điểm là Dependency Injection (DI) . Nó có nghĩa là thuê ngoài nhiệm vụ tạo đối tượng. Hãy giải thích với tôi bằng một ví dụ.
public interface Lunch
{
public void eat();
}
public class Buffet implements Lunch
{
public void eat()
{
// Eat as much as you can
}
}
public class Plated implements Lunch
{
public void eat()
{
// Eat a limited portion
}
}
Bây giờ trong mã của tôi, tôi có một lớp Bữa trưa như sau:
public class LunchDecide {
private Lunch todaysLunch;
public LunchDecide(){
this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
//this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion
}
}
Trong lớp trên, tùy thuộc vào tâm trạng của chúng tôi, chúng tôi chọn Buffet () hoặc Mạ (). Tuy nhiên, hệ thống này được liên kết chặt chẽ. Mỗi khi chúng ta cần một loại Object khác nhau, chúng ta cần thay đổi mã. Trong trường hợp này, bình luận ra một dòng! Hãy tưởng tượng có 50 lớp khác nhau được sử dụng bởi 50 người khác nhau. Nó sẽ là một địa ngục của một mớ hỗn độn. Trong trường hợp này, chúng ta cần tách rời hệ thống. Hãy viết lại lớp lunchDecide.
public class LunchDecide {
private Lunch todaysLunch;
public LunchDecide(Lunch todaysLunch){
this.todaysLunch = todaysLunch
}
}
Lưu ý rằng thay vì tạo một đối tượng bằng từ khóa mới, chúng tôi đã chuyển tham chiếu đến một đối tượng của Loại Bữa trưa làm tham số cho hàm tạo của chúng tôi. Ở đây, việc tạo đối tượng được thuê ngoài. Mã này có thể được nối dây bằng cách sử dụng tệp cấu hình Xml (di sản) hoặc Chú thích Java (hiện đại). Dù bằng cách nào, quyết định Loại đối tượng nào sẽ được tạo sẽ được thực hiện ở đó trong thời gian chạy. Một đối tượng sẽ được Xml đưa vào mã của chúng tôi - Mã của chúng tôi phụ thuộc vào Xml cho công việc đó. Do đó, tiêm phụ thuộc (DI). DI không chỉ giúp làm cho hệ thống của chúng tôi được ghép lỏng lẻo, nó đơn giản hóa việc viết các bài kiểm tra Đơn vị vì nó cho phép các phụ thuộc bị chế giễu. Cuối cùng nhưng không kém phần quan trọng, DI hợp lý hóa Lập trình hướng đối tượng (AOP) dẫn đến việc tách rời và tăng tính mô đun hơn nữa. Cũng lưu ý rằng ở trên DI là Con Contortor tiêm.
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
Spring là một sự thay thế tốt cho công nghệ Enterprise JavaBeans (EJB) . Nó cũng có khung web và thành phần khung dịch vụ web.
Spring bắt đầu như một hệ thống tiêm phụ thuộc khá đơn giản. Bây giờ nó là rất lớn và có tất cả mọi thứ trong đó (ngoại trừ bồn rửa nhà bếp tục ngữ).
Nhưng đừng sợ, nó khá mô-đun để bạn có thể sử dụng chỉ những phần bạn muốn.
Để xem tất cả bắt đầu từ đâu:
Nó có thể cũ nhưng nó là một cuốn sách tuyệt vời.
Đối với một cuốn sách hay khác lần này dành riêng cho mùa xuân, xem:
Nó cũng tham khảo các phiên bản cũ hơn của Spring nhưng chắc chắn đáng xem.
Mùa xuân là sự tiêm phụ thuộc vào lúc bắt đầu, sau đó thêm vua của các hàm bao cho hầu hết mọi thứ (bao bọc trên các triển khai JPA, v.v.).
Câu chuyện dài ... hầu hết các phần của giải pháp XML preffer XML (công cụ kịch bản XML ... brrrr), vì vậy đối với DI tôi sử dụng Guice
Thư viện tốt, nhưng với depnedenciec đang phát triển, ví dụ Spring JDBC (có thể là một giải pháp jdbc Java với các tham số tên thật) lấy từ maven 4-5 tiếp theo.
Sử dụng Spring MVC (một phần của "mùa xuân lớn") để phát triển web ... đó là khung "dựa trên yêu cầu", có chiến tranh thần thánh "request vs thành phần" ... tùy thuộc vào Bạn
Trong quá khứ tôi đã nghĩ về khung mùa xuân từ quan điểm hoàn toàn kỹ thuật.
Có một số kinh nghiệm làm việc nhóm và phát triển Webapps doanh nghiệp - Tôi sẽ nói rằng Spring là để phát triển nhanh hơn các ứng dụng (ứng dụng web) bằng cách tách rời các yếu tố riêng lẻ (đậu). Phát triển nhanh hơn làm cho nó rất phổ biến. Spring cho phép chuyển trách nhiệm xây dựng (nối dây) ứng dụng vào khung Spring. Phép tiêm phụ thuộc của khung công tác Spring chịu trách nhiệm kết nối / nối dây các hạt riêng lẻ vào một ứng dụng hoạt động.
Bằng cách này, các nhà phát triển có thể tập trung nhiều hơn vào việc phát triển các thành phần riêng lẻ (đậu) ngay khi giao diện giữa các hạt được xác định.
Việc kiểm tra ứng dụng này rất dễ dàng - trọng tâm chính được dành cho từng hạt đậu. Chúng có thể dễ dàng tách rời và chế giễu, do đó kiểm tra đơn vị là nhanh chóng và hiệu quả.
Spring framework định nghĩa nhiều bean chuyên dụng như @Controll ( @Restcontroll ), @Rep repository , @Component để phục vụ các mục đích web. Spring cùng với Maven cung cấp một cấu trúc trực quan cho các nhà phát triển. Làm việc nhóm rất dễ dàng và nhanh chóng vì có các yếu tố riêng biệt được tách rời và có thể được sử dụng lại.
Spring framework chắc chắn tốt cho phát triển web và cụ thể hơn cho các dịch vụ api yên tĩnh.
Nó tốt cho những điều trên vì sự phụ thuộc và tích hợp với các mô-đun khác như bảo mật mùa xuân mùa xuân , lò xo , khung mvc , microservice
Với trong bất kỳ ứng dụng nào, bảo mật có lẽ là một yêu cầu.
Nếu bạn định xây dựng một sản phẩm cần bảo trì lâu dài, thì bạn sẽ cần sử dụng khái niệm Aop.
Nếu ứng dụng của bạn có lưu lượng truy cập nhiều do đó làm tăng tải, bạn cần sử dụng khái niệm microservice.
Spring đang cung cấp tất cả các tính năng này trong một nền tảng. Hỗ trợ với nhiều mô-đun .
Quan trọng nhất, mùa xuân là nguồn mở và một khung mở rộng, có một cái móc ở khắp mọi nơi để tích hợp mã tùy chỉnh trong vòng đời.
Spring Data là một dự án cung cấp tích hợp với dự án của bạn.
Vì vậy, mùa xuân có thể phù hợp với hầu hết mọi yêu cầu.