方法一:XML配置
1. 基于构造方法注入
Book类
package com.constructor;
public class Book {
private String bookName;
public Book(String bookName){
this.bookName = bookName;
}
public void display(){
System.out.println("这本书是"+bookName);
}
}
User类
package com.constructor;
public class User {
private Book book;
public User(Book book) {
this.book = book;
}
public void test(){
book.display();
System.out.println("add....");
}
}
bean.xml
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="book" class="com.constructor.Book">
<constructor-arg value="《面纱》"/>
</bean>
<bean id="user" class="com.constructor.User">
<constructor-arg ref="book"></constructor-arg>
</bean>
</beans>
Client
package com.constructor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
User user = (User) context.getBean("user");
user.test();
}
}
2. 基于set方法注入
Book类
package com.set;
public class Book {
private String bookName;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void display(){
System.out.println("这本书是"+bookName);
}
}
User类
package com.set;
public class User {
private Book book;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void test(){
book.display();
System.out.println("add....");
}
}
bean.xml
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.set.User">
<property name="book" ref="book"></property>
</bean>
<bean id="book" class="com.set.Book">
<property name="bookName" value="面纱"></property>
</bean>
</beans>
Client类
package com.set;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
User user = (User) context.getBean("user");
user.test();
}
}
3. p命名空间注入
Book类
package com.pname;
public class Book {
private String bookName;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void display(){
System.out.println("这本书是"+bookName);
}
}
User类
package com.pname;
public class User {
private Book book;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void test(){
book.display();
System.out.println("add....");
}
}
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--p名称空间-->
<bean id="user" class="com.pname.User" p:book-ref="book"></bean>
<bean id="book" class="com.pname.Book" p:bookName="面纱"></bean>
</beans>
Client类
package com.pname;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
User user = (User) context.getBean("user");
user.test();
}
}
方法二:Java代码配置
Book类
package javaconfig;
import org.springframework.beans.factory.annotation.Value;
public class Book {
private String bookName = "sss";
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void display(){
System.out.println("这本书是"+bookName);
}
}
User类
package javaconfig;
public class User {
private Book book;
public User(Book book) {
this.book = book;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void test(){
book.display();
System.out.println("add....");
}
}
JavaConfig类
package javaconfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JavaConfig {
@Bean
public Book Book(){
return new Book();
}
@Bean
public User User(){
return new User(new Book());
}
}
Test类
import javaconfig.JavaConfig;
import javaconfig.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class JavaTest {
@Autowired
private User user;
@Test
public void testJavaconfig(){
user.test();
}
}
方法三:自动装配
Book类
package autoconfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Book {
@Value("面纱")
private String bookName;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void display(){
System.out.println("这本书是"+bookName);
}
}
User类
package autoconfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class User {
@Autowired
private Book book;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void test(){
book.display();
System.out.println("add....");
}
}
AutoConfig类
package autoconfig;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class AutoConfig {
}
Test类
import autoconfig.AutoConfig;
import autoconfig.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AutoConfig.class)
public class AutoTest {
@Autowired
private User user;
@Test
public void testAutoconfig(){
user.test();
}
}