Spring architecture and understanding its packages and dependencies
Spring Interview Questions and Answers Q1 - Q14 are FAQs
Q11. What is the minimal package requirements to get started with Spring framework in your Java project?
A11.
So, your maven pom.xml file should at least have
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
Q. When do you need the spring-context-support package?
A. This is required for integration of EhCache, JavaMail, Quartz, and Freemarker. So, if you are going to use Java Mail to send emails or Quartz to schedule a job, then you need spring-context-support.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency>
Q. What package(s) will you include if you want transaction management support?
A. spring-tx, which depends on spring-core, spring-beans, spring-aop, and spring-context.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency>
Q. What packages will be required for the database access?
A. spring-jdbc, which depends on spring-core, spring-beans, spring-context, and spring-tx. if using Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA or iBatis then you need spring-orm, which depends on spring-core, spring-beans, spring-context, and spring-tx.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency>
Q. What if you want to use JAXB, JiBX,XStream, XMLBeans or any other Object-To-Xml(OXM) mapping?
A. You need spring-oxm, which depends on spring-core, spring-beans, and spring-context.
Similarly,
- spring-test is required for junit testing.
- spring-web is required if you want to use a web framework like Spring MVC, JSF, Struts, etc, and depends on depends on spring-core, spring-beans, and spring-context.
- spring-webmvc is required to use Spring as the MVC framework for Web application or RESTFul web service. It depends on spring-core, spring-beans, spring-context, and spring-web.
- spring-mock.jar containing mock classes to assist with the testing.
- spring-jms for messaging and depends on spring-core and spring-oxm (i.e. for OXM).
Spring framework architecture is modular with layers like core, data access & integration, web/remoting, and other miscellaneous support.
Q. What is a JAR hell issue, and how will you go about resolving it?
A. The following maven command helps you to find duplicated or overlapping JAR versions.
$ mvn dependency:tree
and then you can exclude them as shown in the example below with "Exclusion"
<dependency> <groupId>com.myapp</groupId> <artifactId>some-app</artifactId> <version>${myapp.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </exclusion> </exclusions> </dependency>
Q. Why would you use Spring framework in your next project?
A.
- A key design principle in Spring in general is the “Open for extension, closed for modification” principle.So, some of the methods in the core classes are marked "final".
- Spring is an IoC container that supports both constructor injection (supplying arguments to constructors) and setter-based injection (calling setters on a call) to get the benefits of Dependency Injection (DI) like loose coupling, easier to test, etc.
- It is a light-weight framework.
- It is modular.
- It is very matured and has been used in many large Java/JEE applications.
- It supports AOP to implement cross cutting concerns.
- It supports transaction management.
- It promotes uniformity to handle exceptions (e.g. checked vs unchecked) and integration with JMS, JDBC, JNDI, remoting, etc.
Labels: Spring
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home