FRAMEWORK
FRAMEWORK
DAY-1
What is Framework?
Fr is a soft arch that provides a structure, guidelines and
reusable component to facilitate the development of an
application.
Fr handles the infrastructure so that you can focus on logic
Control Flow will be managed by framework itself
To simplify Development
EXAMPLE:
CREATE A TABLE
SQL
ResultSet
Create Model Object
Create a List
Loop : Add Model into List
return List
Hibernate:
get the List (Table, SQL, Model Object, Model->Setter, List,
add(model),return List)
return List
What is Hibernate?
Hibernate is a framework which provides an ORM tool to
simplify the development (DAO)
Hibernate ORM tool (Object Relational Mapping)
To achieve Data Persistency
GAVIN KING 2001
Internally it uses JDBC API
Third Party
ADVANTAGE:
Fast Performance
Pooling Mechanism
SQL Independent (SQL,HQL,PURE JAVA)
CACHING MECHANISM
Auto Table Creation
No Checked Exp
PK Generation
Easily Pagination
Versioning
EASY CRUD
Simplify
Job Opp
DAY-2
In Hibernate we can Perform DB operation in two ways
1.SINGLE OPERATION
2.BULK OPERATION
NOTE:
XML Approach:
HBN is a third party framework so we need its
JARs
Version: HBN5.X
package com.mainapp;
import java.io.Serializable;
import java.util.Scanner;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Launch {
//SETUP READY
SessionFactory sessionFactory =
configuration.buildSessionFactory();
//Transaction
Transaction trs = session.beginTransaction();
//DATA INSERT
System.out.println(pk);
session.close();
//connection back to pool
//cache memory free
}
}
package com.mainapp;
//Entity Class
public class Employee {
<hibernate-mapping>
</hibernate-mapping>
<hibernate-configuration>
<session-factory>
<property
name="connection.driver_Class">com.mysql.cj.jdbc.Driver</property>
<property
name="connection.url">jdbc:mysql://localhost:3309/test</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
DAY-3
Single Operation
Read Based on PK
Hibernate will use Zero Parameterized
Constructor to create object of your Entity class
then it will call setter to set all values and you
will get object
package com.mainapp;
import java.util.Scanner;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Launch {
SessionFactory sf = getConnection();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("P1->Insert\nP2->Read\nP3->Update\nP4-
>Delete\nP5->InsertORUpdate\nP6->EXIT");
System.out.print("Enter Choice:");
int chocie = scanner.nextInt();//15 \n
scanner.nextLine();
if(chocie==6)
{
System.out.println("THANKS FOR USING");
break;
}
switch (chocie) {
case 1:
insert(sf);
break;
case 2:
read(sf);
break;
case 3:
update(sf);
break;
case 4:
delete(sf);
break;
case 5:
insertOrUpdate(sf);
break;
default:
break;
} //end of switch
}//end of while
}
employee.setEsalary(newsalary);
Transaction trs = session.beginTransaction();
session.update(employee);
trs.commit();
System.out.println("UPDATED");
}else {
System.out.println("NOT EXIST");
}
}
session.close();
}
System.out.println(pk);
session.close();
//connection back to pool
//cache memory free
}
//SETUP READY
SessionFactory sessionFactory =
configuration.buildSessionFactory();
return sessionFactory;
}
}
SessionFactory sf = getConnection();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("P1->Insert\nP2->Read\nP3->Update\nP4-
>Delete\nP5->InsertORUpdate\nP6->EXIT");
System.out.print("Enter Choice:");
int chocie = scanner.nextInt();//15 \n
scanner.nextLine();
if(chocie==6)
{
System.out.println("THANKS FOR USING");
break;
}
switch (chocie) {
case 1:
insert(sf);
break;
case 2:
read(sf);
break;
case 3:
update(sf);
break;
case 4:
delete(sf);
break;
case 5:
insertOrUpdate(sf);
break;
default:
break;
} //end of switch
}//end of while
}
employee.setEsalary(newsalary);
Transaction trs = session.beginTransaction();
session.update(employee);
trs.commit();
System.out.println("UPDATED");
}else {
System.out.println("NOT EXIST");
}
}
session.close();
}
System.out.println(pk);
session.close();
//connection back to pool
//cache memory free
}
configuration.setProperties(properties);
configuration.addAnnotatedClass(Employee.class);
//SETUP READY
SessionFactory sessionFactory =
configuration.buildSessionFactory();
return sessionFactory;
}
}
package com.mainapp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//Entity Class
@Entity
@Table(name="myemployee")
public class Employee {
@Id
@Column(name = "id")
private int eid;
@Column(name = "salary")
private int esalary;
public Employee() {
}
getVersion->3
if (version>2)
Don’t Update
else
Update
BULK OPERATION:
NATIVE SQL APPROACH
PAGINATION
HQL
CRITERIA
DAY-6
BULK OPERATION (READ UPDATE DELETE)
1.SQL
2.HQL
3.PURE JAVA
DAY-7
Pagination
20 Entries
SetFirstResult=0
Max result = 4
ROW: 1 2 3 4
SetFirstResult=4
Max result = 4
ROW: 5 6 7 8
DAY-8
HQL(Hibernate Query Language)
->To perform bulk operation (READ DELETE
UPDATE)
->We cannot perform insert operation in HQL
->you can copy data from one table to another
HQL is database independent
SQL
From table name
select * from emPloyEe;(Valid)
HQL
From Entity Name
from Employee; (Valid)
from employee; (Invalid)
DAY-10
HQL Supports Polymorphic query ( from
Parent class -> Child classes access )
private static void readHQL(SessionFactory sf) {
for(Player p : list) {
Cricketer c=(Cricketer) p;
System.out.println(c);
}
else {
Footballer f=(Footballer) p;
System.out.println(f);
}
}
NativeQuery nativeQuery =
session.createNativeQuery(sql);
List<Object[]> list = nativeQuery.getResultList();
DAY-11
Hibernate Mapping : it defines how java objects
map to the Relational database tables
Object [ Object ]Separate Table
One to One Mapping
->Unidirectional ->Bidirectional
One to Many Mapping
Many to One Mapping
Many to Many Mapping
package com.mainapp;
import java.util.Properties;
import java.util.Scanner;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
public class Launch {
while (true) {
System.out.println("P1->Insert\nP2-
>ReadFromPlayer\nP3->ReadFromAdhaar\nP4->Delete\nP5-
>EXIT");
System.out.print("Enter Choice:");
int chocie = scanner.nextInt();
scanner.nextLine();
if (chocie == 5) {
System.out.println("THANKS FOR
USING");
break;
}
switch (chocie) {
case 1:
insert(sf);
break;
case 2:
readFromPlayer(sf);
break;
case 3:
readFromAhdaar(sf);
break;
default:
break;
}
}
}
System.out.println(adhaar.getPlayer().getPid());
System.out.println(adhaar.getPlayer().getPname());
session.save(p);
t.commit();
}
package com.mainapp;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "adhaar")
public class Adhaar {
@Id
@Column(name = "adhaarno")
private int adhaarNo;
@Column(name = "adhaarname")
private String adhaarName;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "pid")
private Player player;
public Adhaar() {
// TODO Auto-generated constructor stub
}
public Adhaar(int adhaarNo, String adhaarName) {
super();
this.adhaarNo = adhaarNo;
this.adhaarName = adhaarName;
}
// @Override
// public String toString() {
// return "Adhaar [adhaarNo=" + adhaarNo + ",
adhaarName=" + adhaarName + ", player=" + player + "]";
// }
package com.mainapp;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "player")
public class Player {
@Id
@Column(name = "pid")
private int pid;
@Column(name = "pname")
private String pname;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "adhaarno")
private Adhaar adhaar;
public Player() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Player [pid=" + pid + ", pname=" +
pname + ", adhaar=" + adhaar + "]";
}
}
DAY-12
ONE TO MANY
MANY TO ONE
MANY TO MANY (UNI/BI)
DAY-13
CRITERIA API
->It is a feature provided by JPA to construct dynamic and database
independent query to interact with databases
->this is pure Java approach
->You can perform BULK Operation (READ UPDATE DELETE)
->ClassName and field Names
package com.mainapp;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.query.Query;
public class Launch {
SessionFactory sf = getConnection();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("P1->Insert\nP2->Read\nP3-
>Update\nP4->Delete\nP5->Test");
System.out.print("Enter Choice:");
int chocie = scanner.nextInt();
scanner.nextLine();
if (chocie == 6) {
System.out.println("THANKS FOR USING");
break;
}
switch (chocie) {
case 1:
insert(sf);
break;
case 2:
read(sf);
break;
case 3:
update(sf);
break;
case 4:
delete(sf);
break;
case 5:
test(sf);
break;
default:
break;
}
}
}
//pid,pname-> Projection
ProjectionList projectionList =
Projections.projectionList();
projectionList.add(Projections.property("pid"));
projectionList.add(Projections.property("pname"));
SimpleExpression lt = Restrictions.lt("pid",4);
criteria.setProjection(projectionList);
criteria.add(lt);
for(int i=1;i<=10;i++) {
Transaction t = session.beginTransaction();
Player player = new Player("raju"+i, "CSK"+i);
session.save(player);
t.commit();
}
}
readCriteria.multiselect(root.get("pid"),root.get("pname"));
//select id,name from criteriaplayer
Predicate c1 =
criteriaBuilder.lessThan(root.get("pid"), 6); //id<6
Predicate c2 = criteriaBuilder.like(root.get("pname"),
"%2"); //name like '%2'
readCriteria.where(criteriaBuilder.and(c1,c2)); //where
id<6 and name like '%2'
Query<Player> query =
session.createQuery(readCriteria);
List<Player> list = query.list();
System.out.println(list);
}
CriteriaBuilder criteriaBuilder =
session.getCriteriaBuilder();
CriteriaUpdate<Player> updateCriteria =
criteriaBuilder.createCriteriaUpdate(Player.class);
Root<Player> root = updateCriteria.from(Player.class);
}
private static void delete(SessionFactory sf) {
Session session = sf.openSession();
Transaction t = session.beginTransaction();
//delete from criteriaplayer where id>6
CriteriaBuilder criteriaBuilder =
session.getCriteriaBuilder();
CriteriaDelete<Player> criteriaDelete =
criteriaBuilder.createCriteriaDelete(Player.class);
Root<Player> root = criteriaDelete.from(Player.class);
criteriaDelete.where(criteriaBuilder.greaterThan(
root.get("pid"), 6));
Query<Player> query =
session.createQuery(criteriaDelete);
query.executeUpdate();
t.commit();
Spring Modules:
1. Spring Core
2. Spring JDBC
3. Spring MVC
SPRING FRAMEWORK
DAY 2:
Spring Core
->It is a module of spring framework
->it teaches how to manage objects
OBJECT MANAGEMENT
->Object Creation
->Object life cycle
->Object injection/Dependency Injection
SPRING FRAMEWORK
DAY 4:
Bean Scope:
Singleton (bydeafult) : Object will be created only once and each
time when you ask for object it will share same object
Prototype (Object will create when u invoke getBean() and every
time IOC container will provide a new Object)
package com.mainapp;
import org.springframework.context.support.ClassPathXmlApplicationContext;
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
System.out.println("RAJU ACCOUNT CREATION");
Account acc1=(Account)ac.getBean("acc");
acc1.setUsername("RAJU123");
acc1.setPassword("123456");
acc1.setFullName("RAJU KK");
acc1.setAddress("MUMBAI");
System.out.println(acc1);
Account acc2=(Account)ac.getBean("acc");
acc2.setUsername("KAJU123");
acc2.setPassword("223456");
acc2.setFullName("KAJU KK");
acc2.setAddress("HYDRABAD");
System.out.println(acc2);
public Account() {
System.out.println("ACC INSTANTIATION");
}
@Override
public String toString() {
return "Account [username=" + username + ", password=" + password
+ ", fullName=" + fullName + ", address="
+ address + "]";
}
}
</beans>
Dependency Injection through
XML
->Dependency injection term is used to refer injecting a dependent object of a
class into another class.
1.Setter Injection
2.Constructor Injection
Controller{
private Service service; //Dependency
public Controller(){
service=new Service(); //Constructor Dependency Injection
}
public void doPost(){
service.test(); //NullPointerException
}
}
public Service{
test(){ }
}
SPRING FRAMEWORK
DAY 5:
Bean Life Cycle
ac.close();
}
}
package com.mainapp;
public class EmployeeBean {
static
{
System.out.println("BEAN LOADING");
}
public EmployeeBean()
{
System.out.println("BEAN INSTANTIATION");
}
<bean
id="emp"
class="com.mainapp.EmployeeBean"
init-method="myXmlInit"
destroy-method="myXmlDestroy"
scope="prototype"
> </bean>
</beans>
SPRING FRAMEWORK
DAY 6:
CallBack Interface ( Less
Common )
IntializingBean DisposableBean
package com.mainapp;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Launch {
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
ac.close();
}
}
package com.mainapp;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
static {
System.out.println("BEAN LOADING");
}
public EmployeeBean() {
System.out.println("BEAN INSTANTIATION");
}
@PostConstruct
public void myAnnoInit() {
System.out.println("RESOURCE ALLOCATION-ANNO");
}
//init method
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("RESOURCE ALLOCATION-CALL");
}
//destroy
@Override
public void destroy() throws Exception {
System.out.println("RESOURCE DE-ALLOCATION-CALL");
@PreDestroy
public void myAnnoDestroy() {
System.out.println("RESOURCE DE-ALLOCATION-ANNO");
}
}
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"> <!-- bean
definitions here -->
<bean
id="emp"
class="com.mainapp.EmployeeBean"
init-method="myXmlInit"
destroy-method="myXmlDestroy"
> </bean>
<bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcess
or"
> </bean>
</beans>
Note:
RESOURCE ALLOCATION-ANNO
RESOURCE ALLOCATION-CALL
RESOURCE ALLOCATION-XML
Bean Instantiation:
Simple <bean> Tags
Static Factory Method
package com.mainapp;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Launch {
ac.close();
}
}
package com.mainapp;
import java.util.Scanner;
static {
System.out.println("BEAN LOADING");
}
EmployeeBean employeeBean;
int key=scanner.nextInt();
if(key==1212) {
employeeBean=new EmployeeBean("QWERTY");
}
else {
employeeBean=new EmployeeBean("PQRS");
}
return employeeBean;
}
}
<?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:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"> <!-- bean definitions here -->
<!-- <bean
id="emp"
class="com.mainapp.EmployeeBean"
>
</bean> -->
<bean
id="emp"
class="com.mainapp.EmployeeBean"
factory-method="customObject"
>
</bean>
<bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"
>
</bean>
</beans>
Factory class
package com.mainapp;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Launch {
ac.close();
}
}
package com.mainapp;
import java.util.Scanner;
public class EmployeeBean {
static {
System.out.println("BEAN LOADING");
}
public EmployeeBean(String companyCode) {
this.companyCode=companyCode;
System.out.println("BEAN INSTANTIATION");
}
EmployeeBean employeeBean;
int key=scanner.nextInt();
if(key==1212) {
employeeBean=new EmployeeBean("QWERTY");
}
else {
employeeBean=new EmployeeBean("PQRS");
}
return employeeBean;
}
<bean
id="emp"
class="com.mainapp.EmployeeBean"
factory-bean="fbean"
factory-method="customObject"
>
</bean>
<bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"
>
</bean>
</beans>
SPRING FRAMEWORK
DAY 7:
BeanPostProcessor(Interface)
Bean Loading
Bean Instantiation
postProcessBeforeInitialization(); //LOG
init()
postProcessAfterInitialization(); //LOG
Custom method
destroy()
SPRING FRAMEWORK
DAY 8:
Bean Inheritance
<bean> : 5 property
<bean>: child
<bean>: child
<bean>: child
SPRING FRAMEWORK
DAY 9:
Dependency Injection in XML
1.setter injection <property> Ex. Primitive,String(value)
UserDefinedObj(ref)
2.constructor injection <constructor-agr> Ex.
Primitive,String(value) UserDefinedObj(ref)
Collection Injection
List injection:
1.List of inbuilt class object Ex. List<String> listOfBooks;
(Default Impl : ArrayList)
Through Setter:
package com.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Launch {
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
Employee employee= (Employee) ac.getBean("employee");
employee.setEid(11);
employee.setEname("Raju");
employee.setEaddress("add1");
System.out.println(employee);
System.out.println(employee.getDeafultListOfBooks().getClass());
}
}
package com.test;
import java.util.List;
//USER
private int eid;
private String ename;
private String eaddress;
public Employee() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Employee [eid=" + eid + ", ename=" + ename + ", eaddress=" + eaddress + ",
deafultListOfBooks="
+ deafultListOfBooks + "]";
}
}
Through Constructor:
employee.java
public Employee(List<String> deafultListOfBooks) {
super();
this.deafultListOfBooks = deafultListOfBooks;
}
bean.xml
<bean id="employee" class="com.test.Employee" >
<constructor-arg name="deafultListOfBooks">
<list>
<value>JAVA</value>
<value>PYTHON</value>
<value>AI</value>
</list>
</constructor-arg>
</bean>
Own Implementation
1.StandAlone List (for setter you can use <property> tag
inside employee <bean>
<bean id="employee" class="com.test.Employee">
<constructor-arg name="deafultListOfBooks" ref="list">
</constructor-arg>
</bean>
<!-- STANDALONE LIST -->
<util:list id="list" list-class="java.util.LinkedList">
<value>JAVA</value>
<value>PYTHON</value>
<value>AI</value>
</util:list>
Note:
// ArrayList<String> arrayList = new ArrayList<String>();
// arrayList.add("test1");
// arrayList.add("test2");
// arrayList.add("test3");
//
// LinkedList<String> linkedList = new
LinkedList<String>(arrayList);
// System.out.println(linkedList);
System.out.println(employee);
System.out.println(employee.getDefaultListOfAccounts().getClass());
}
}
package com.test;
//IOC
private int an;
private String aname;
public Account() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Account [an=" + an + ", aname=" + aname + "]";
}
}
package com.test;
import java.util.List;
//USER
private int eid;
private String ename;
private String eaddress;
//IOC
private List<Account> defaultListOfAccounts; //DEPENDENCY
public Employee() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Employee [eid=" + eid + ", ename=" + ename + ", eaddress=" + eaddress + ",
defaultListOfAccounts="
+ defaultListOfAccounts + "]";
}
}
</beans>
Through Constructor:
<bean id="acc1" class="com.test.Account">
<constructor-arg name="an" value="9090" ></constructor-arg>
<constructor-arg name="aname" value="bank1" ></constructor-arg>
</bean>
Own implementation:
1.StandAlone list: (for Setter you can use
<property> tag inside employee <bean> tag
<bean id="acc1" class="com.test.Account">
<constructor-arg name="an" value="9090" ></constructor-
arg>
<constructor-arg name="aname" value="bank1"
></constructor-arg>
</bean>
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
Employee employee= (Employee) ac.getBean("employee");
employee.setId(18);
employee.setName("raju");
employee.setAddress("add1");
System.out.println(employee);
System.out.println(employee.getSetOfDefaultBooks().getClass());
}
}
package com.test;
import java.util.Set;
//USER
private int id;
private String name;
private String address;
//IOC
private Set<String> setOfDefaultBooks;
public Employee() {
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ",
address=" + address + ", setOfDefaultBooks="
+ setOfDefaultBooks + "]";
}
}
Through constructor:
<bean id="employee" class="com.test.Employee">
<constructor-arg name="setOfDefaultBooks">
<set>
<value>JAVA</value>
<value>JAVAABC</value>
<value>ABCJAVA</value>
<value>JAVABBB</value>
<value>JAYYYVA</value>
<value>JPPPAVA</value>
</set>
</constructor-arg>
</bean>
Own impl:
1.StandAlone:
Through constructor
<bean id="employee" class="com.test.Employee">
<constructor-arg name="setOfDefaultBooks" ref="set">
</constructor-arg>
</bean>
Through Setter:
<bean id="employee" class="com.test.Employee">
<property name="setOfDefaultBooks" ref="set">
</property>
</bean>
<util:set id="set" set-class="java.util.HashSet">
<value>JAVA</value>
<value>JAVAABC</value>
<value>ABCJAVA</value>
<value>JAVABBB</value>
<value>JAYYYVA</value>
<value>JPPPAVA</value>
</util:set>
Note:
<bean id="employee" class="com.test.Employee">
<property name="setOfDefaultBooks" ref="set">
</property>
</bean>
=======================================
=============================
Set of user defined class object
1.default impl(setter)
package com.test;
import
org.springframework.context.support.ClassPathXmlApplicationConte
xt;
public class Launch {
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
Employee employee= (Employee) ac.getBean("employee");
employee.setId(18);
employee.setName("raju");
employee.setAddress("add1");
System.out.println(employee);
System.out.println(employee.getSetOfAccounts().getClass());
}
}
package com.test;
import java.util.Set;
//USER
private int id;
private String name;
private String address;
//IOC
private Set<Account> setOfAccounts;
public Employee() {
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ",
address=" + address + ", setOfAccounts=" + setOfAccounts
+ "]";
}
}
package com.test;
//IOC
private int an;
private String aname;
public Account() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Account [an=" + an + ", aname=" + aname + "]";
}
}
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<!-- bean definitions here -->
MAP INJECTION:
1. Map of predefined class Object Ex. Map<String,String>
By default it will inject LinkedHashMap (Order:
Preserved) : setter/getter
Own impl( Ex. HashMap )
a.StandAlone Map : setter/getter
b.Seperate bean tag : setter/getter
2. Set of user defined class Object Ex. Map<String,Account>
By default it will inject LinkedHashMap (Order:
Preserved) : setter/getter
Own impl( Ex. HashMap )
a.StandAlone Map : setter/getter
b.Seperate bean tag : setter/getter
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
Employee employee= (Employee) ac.getBean("employee");
employee.setId(18);
employee.setName("raju");
employee.setAddress("add1");
System.out.println(employee);
System.out.println(employee.getMapOfBooks().getClass());
}
}
package com.test;
import java.util.Map;
public class Employee {
//USER
private int id;
private String name;
private String address;
//IOC
private Map<String,String> mapOfBooks;
public Employee() {
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ",
address=" + address + ", mapOfBooks=" + mapOfBooks + "]";
}
</beans>
Through constructor: use constructor-arg tag with employee
bean
Own impl:
1.StandAlone Map: (Setter)
<bean id="employee" class="com.test.Employee">
<property name="mapOfBooks" ref="map">
</property>
</bean>
ClassPathXmlApplicationContext ac = new
ClassPathXmlApplicationContext("bean.xml");
Employee employee= (Employee) ac.getBean("employee");
employee.setId(18);
employee.setName("raju");
employee.setAddress("add1");
System.out.println(employee);
System.out.println(employee.getMapOfAccounts().getClass());
}
}
package com.test;
import java.util.Map;
public class Employee {
//USER
private int id;
private String name;
private String address;
//IOC
private Map<String,Account> mapOfAccounts; //<
key=preDefined , value=userDefined >
public Employee() {
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ",
address=" + address + ", mapOfAccounts=" + mapOfAccounts
+ "]";
}
}
Own Impl:
1.StandAlone(Setter)
<bean id="acc1" class="com.test.Account">
<constructor-arg name="an" value="9090"></constructor-
arg>
<constructor-arg name="aname"
value="bank1"></constructor-arg>
</bean>
Exceptional Case:
Key: Integer (LinkedHashMap only, map-class
wont work)
=======================================
=========================
SPRING FRAMEWORK
DAY 11:
Dependency Injection in XML
Autowiring through XML
->It is a way of dependency injection in which
dependency will inject automatically
Modes:
1.No (Manually injection)
2.byName (Setter)
3.byType (Setter)
4.constructor ( Constructor )
Not Suitable for Complex Configuration
Not Readable
bean.xml
<bean id=”eid” class=”com.test.Employee”
autowire=”byName”>
</bean>
<bean id=”account” >
<util:list id=”listofbooks” class=”linkedlist”>
<util:list id=”listofbooks2” class=”vector”>
byname:
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<!-- bean definitions here -->
</bean>
</beans>
In case of byname if there is two bean
available and we are looking for a single bean
then in such case we can disqualify a bean by
autowire-candidate=”false” , still it will be
available for manual injection and autowire
byname injection
</beans>
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
F
z
z