Skip to content
This repository has been archived by the owner on Apr 16, 2024. It is now read-only.

Commit

Permalink
[ch08] 8.10 Apply @Autowired annotation.
Browse files Browse the repository at this point in the history
  • Loading branch information
dhsim86 committed Jun 6, 2017
1 parent 0372edf commit 849d977
Show file tree
Hide file tree
Showing 7 changed files with 304 additions and 0 deletions.
73 changes: 73 additions & 0 deletions src/main/java/exam/test17/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package exam.test17;

import org.springframework.beans.factory.annotation.Autowired;

import java.util.Map;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class Car {
private String model;
private Engine engine;
private Tire[] tires;
Map<String, Object> options;

public Car() {

}

public Car(String model, Engine engine) {
this.model = model;
this.engine = engine;
}

public String getModel() {
return model;
}

public void setModel(String model) {
this.model = model;
}

public Engine getEngine() {
return engine;
}

@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}

public Tire[] getTires() {
return tires;
}

public void setTires(Tire[] tires) {
this.tires = tires;
}

public Map<String, Object> getOptions() {
return options;
}

public void setOptions(Map<String, Object> options) {
this.options = options;
}

@Override
public String toString() {
StringBuffer carInfo = new StringBuffer();
carInfo.append("[Car: " + model);
carInfo.append("\n " + engine.toString());

if (tires != null) {
for (Tire tire : tires) {
carInfo.append("\n " + tire.toString());
}
}
carInfo.append("\n]");

return carInfo.toString();
}
}
22 changes: 22 additions & 0 deletions src/main/java/exam/test17/CustomPropertyEditorRegistrar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package exam.test17;

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.propertyeditors.CustomDateEditor;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar {

private CustomDateEditor customDateEditor;

public void setCustomDateEditor(CustomDateEditor customDateEditor) {
this.customDateEditor = customDateEditor;
}

@Override
public void registerCustomEditors(PropertyEditorRegistry registry) {
registry.registerCustomEditor(java.util.Date.class, customDateEditor);
}
}
38 changes: 38 additions & 0 deletions src/main/java/exam/test17/Engine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package exam.test17;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class Engine {
private String maker;
private int cc;

public Engine() {

}

public Engine(String maker) {
this.maker = maker;
}

public String getMaker() {
return maker;
}

public void setMaker(String maker) {
this.maker = maker;
}

public int getCc() {
return cc;
}

public void setCc(int cc) {
this.cc = cc;
}

@Override
public String toString() {
return "[Engine: " + maker + ", " + cc + "]";
}
}
26 changes: 26 additions & 0 deletions src/main/java/exam/test17/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package exam.test17;

/**
* Created by nhnent on 2017. 5. 27..
*/

import java.text.SimpleDateFormat;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class Test {

public static void main(String[] args) {

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("file:/Users/nhnent/workspace/workspace-intellij/java_webdev_workbook_spring/src/main/java/exam/test17/beans.xml");

Car car1 = (Car)ctx.getBean("car1");
Car car2 = (Car)ctx.getBean("car2");

System.out.println(car1);
System.out.println(car2);
}
}
51 changes: 51 additions & 0 deletions src/main/java/exam/test17/Tire.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package exam.test17;

import java.util.Date;
import java.util.Map;
import java.util.Properties;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class Tire {
private String maker;
private Properties spec;
private Date createdDate;

public String getMaker() {
return maker;
}

public void setMaker(String maker) {
this.maker = maker;
}

public Properties getSpec() {
return spec;
}

public void setSpec(Properties spec) {
this.spec = spec;
}

public Date getCreatedDate() {
return createdDate;
}

public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

@Override
public String toString() {
StringBuffer specInfo = new StringBuffer();

if (spec != null) {
for (Map.Entry<Object, Object> entry : spec.entrySet()) {
specInfo.append(entry.getKey() + ":" + entry.getValue() + ", ");
}
}

return "[Tire: " + maker + ", " + specInfo.toString() + ((createdDate != null) ? (", " + createdDate.toString()) : "") + "]";
}
}
73 changes: 73 additions & 0 deletions src/main/java/exam/test17/TireFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package exam.test17;

import java.text.SimpleDateFormat;
import java.util.Properties;

import org.springframework.beans.factory.config.AbstractFactoryBean;

/**
* Created by nhnent on 2017. 5. 27..
*/
public class TireFactory extends AbstractFactoryBean<Tire> {

String maker;

public void setMaker(String maker) {
this.maker = maker;
}

@Override
public Class<?> getObjectType() {
return Tire.class;
}

protected Tire createInstance() {
if (maker.equals("Hankook")) {
return createHankookTire();
} else {
return createKumhoTire();
}
}

private Tire createHankookTire() {
Tire tire = new Tire();
tire.setMaker("Hankook");

Properties specProp = new Properties();
specProp.setProperty("width", "205");
specProp.setProperty("ratio", "65");
specProp.setProperty("rim.diameter", "14");
tire.setSpec(specProp);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

try {
tire.setCreatedDate(dateFormat.parse("2014-5-5"));
} catch (Exception e) {

}

return tire;
}

private Tire createKumhoTire() {
Tire tire = new Tire();
tire.setMaker("Kumho");

Properties specProp = new Properties();
specProp.setProperty("width", "185");
specProp.setProperty("ratio", "75");
specProp.setProperty("rim.diameter", "16");
tire.setSpec(specProp);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

try {
tire.setCreatedDate(dateFormat.parse("2014-3-1"));
} catch (Exception e) {

}

return tire;
}
}
21 changes: 21 additions & 0 deletions src/main/java/exam/test17/beans.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

<bean id="hyundaiEngine" class="exam.test17.Engine">
<constructor-arg value="Hyundai"/>
</bean>

<bean id="car1" class="exam.test17.Car">
<property name="model" value="Sonata"/>
</bean>

<bean id="car2" class="exam.test17.Car">
<property name="model" value="Grandeur"/>
</bean>

</beans>

0 comments on commit 849d977

Please sign in to comment.