Spring概述
-
一个轻量级,开源的JavaEE框架
-
为了解决企业应用复杂度高的场景,言下之意,为了企业级开发必须简化,轻量级。
-
Spring与其他的开源框架能够进行很好的整合(优点)
-
致力于JavaEE应用的各种解决方案。Spring提倡一站式开发。
Bean如何纳入Spring容器?
全注解开发(基于Java配置方式的开发)@Configuration,@Bean
创建一个User类,然后把它交给spring来管理
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1292530168987664626L;
private Integer id;
private String name;
private String password;
private Float salary;
public User() {
System.out.println("User()");
}
}
复制代码
@Configuration注解表示这个类可以使用Spring IoC容器为bean定义来源。在@Bean 注解告诉Spring的注解为@Bean的一个方法将返回应注册为在Spring应用程序上下文中的bean对象。
// 建立了一个配置类,这个配置类等于与applicationContext.xml
@Configuration
public class UserConfig {
/**
* 向Spring容器注入了一个Bean,返回值类型就是Bean的类型
* 方法名就是Bean的id(名称)
*
* <bean id="user" class="User"></>
*
* @return
*/
@Bean
public User user() {
User user = new User();
user.setId(1000);
user.setName("zhangsan");
user.setPassword("123456");
user.setSalary(12.34F);
return user;
}
}
复制代码
上面的代码将等同于下面的XML配置:
<bean id="user" class="com.java.spring.demo1.domain.User">
<property name="id" value="1000"/>
<property name="name" value="zhangsan"/>
<property name="password" value="123456"/>
<property name="salary" value="12.34"/>
</bean>
复制代码
测试1
如果是通过xml配置,则@ContextConfiguration引入xml的文件,然后使用@Autowired注解将User注入进来
@ContextConfiguration(value = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class IoCTest {
@Autowired
private User user;
@Test
public void test() {
System.out.println(this.user);
}
}
复制代码
测试2
如果是通过注解配置,则@ContextConfiguration引入UserConfig配置类即可
@ContextConfiguration(classes = UserConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest1 {
@Autowired
private User user;
@Test
public void test() {
System.out.println(this.user);
}
}
复制代码
测试3
也可以直接通过获取spring的容器来获取bean
public class UserTest {
private ApplicationContext context;
private User user;
@Before
public void setUp() {
this.context = new AnnotationConfigApplicationContext(UserConfig.class);
this.user = this.context.getBean(User.class);
}
@Test
public void test() {
System.out.println(this.user);
}
}
复制代码
控制台输出以下则成功
User()
User(id=1000, name=lisi, password=123456, salary=12.34)
复制代码
源码地址: