Spring container could help us create objects we need and inject them into proper objects. Here are two ways to achieve this process.
1. Setter Injection
First, we have two interfaces here:
DAO:
Service:
And two corresponding classes:
DAOImpl:
ServiceImpl:
As we can see, we want to initialize "MyinjectionDAO" through a setter method in class "InjectionServiceImpl".
Then, we can do this in xml:
<property name>: Remember the setter name above? It is "SetMyInjectionDAO". So, cut off "set" and write the left part in the name. Do not care about the first letter, "MyInjectionDAO" and "myInjectionDAO" both indicate the same setter method "SetMyInjectionDAO". Nonetheless, only the first letter is insensitive.
<property ref>: The id of the object you want to inject. Here we want to inject into "InjectionDAO", so we can see "2" and "3" are same. Moreover, here we want to inject an object, thus we use ref. But if you want to inject a value, replace ref with value.
Main:
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
System.out.println("context 创建完毕\n");
InjectionService MyService = (MyInterface.InjectionService) context.getBean("InjectionService");
MyService.save("This is my data");
2. Constructor Injection
The major difference bewteen Consturctor Injection and Setter Injection are in .xml and constructor method:
xml:
<constructor-arg>: As we can get from its name, it indicates the arugments used to construct the object.
About multiple arugments could refer to this: Injection Methods (转载)
constructor method: