文章目录
普通的XML文件配置
对于xml配置,在Spring 2.0以后使用了Schema格式,使不同类型的配置文件都有了自己的命名空间,使得xml配置更加具有扩展性。
默认的命名空间:没有空间名,用于Spring Bean的定义。
xsi命名空间:用于为每个文档中命名空间指定相应的Schema格式文件。是W3定义的标准命名空间。
aop命名空间:是Spring配置AOP的命名空间,是用户自定义的。
applicationContext.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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.fzxey.ioc.pojo.UserBean" id="userId" />
</beans>
UserBean.java
package com.fzxey.ioc.pojo;
public class UserBean {
public UserBean() {
}
public void say() {
System.out.println("基于xml配置的bean");
}
}
SpringTest.java
package com.fzxey.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.fzxey.ioc.pojo.UserBean;
public class SpringTest {
@Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserBean user = (UserBean) ac.getBean("userId");
user.say();
}
}
基于Java注解的XML配置(自动配置)
自动配置也叫自动注入,自动配置来简化Bean的配置。有如下几个注解来实现:
@Component : 一般用于身份不明确的组件上。
@Service : 一般用于Service层上。
@Controller : 一般用于Controller层上。
@Repository : 一般用于数据访问层(DAO层)。
applicationContext.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.fzxey.ioc" />
</beans>
xmlns:context="http://www.springframework.org/schema/context"
需要加载Context模块的Schema文件,
<context:component-scan base-package="com.fzxey.ioc" />
作用是自动扫描base-package包下的注解。
Userbean.java
package com.fzxey.ioc.pojo;
import org.springframework.stereotype.Component;
@Component
public class UserBean {
public UserBean() {
}
public void say() {
System.out.println("基于Java注解的bean");
}
}
SpringTest.java
package com.fzxey.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.fzxey.ioc.pojo.UserBean;
public class SpringTest {
@Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserBean user = (UserBean) ac.getBean("userBean");
user.say();
}
}
基于Java类配置
在SpringBoot 流行后,用Java类配置Bean被广泛使用。本质上就是用一个Java类取代xml配置。Spring3.0基于java的配置直接支持下面的注解:@Configuration, @Bean, @DependsOn, @Primary, @Lazy, @Import, @ImportResource, @Value
JavaConfig.java
package com.fzxey.ioc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fzxey.ioc.pojo.UserBean;
/**
* Java配置文件
* @Configuration 让当前类和applicationContext.xml作用等价
* @author fzxey
*
*/
@Configuration
public class JavaConfig {
/**
* @Bean 的作用和<bean>的作用是一样的
* id name 默认是和方法名相同的
* @return
*/
@Bean
public UserBean getUB() {
UserBean ub = new UserBean();
return ub;
}
}
UserBean.java
package com.fzxey.ioc.pojo;
public class UserBean {
public UserBean() {
}
public void say() {
System.out.println("基于类的JavaConfig的bean");
}
}
SpringTest.java
package com.fzxey.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.fzxey.ioc.config.JavaConfig;
import com.fzxey.ioc.pojo.UserBean;
public class SpringTest {
@Test
public void test() {
ApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);
UserBean user = (UserBean) ac.getBean(UserBean.class);
user.say();
}
}
@Fzxey