首先要在applicationContext.xml内指定要扫描的包,这样在这个包下的注解才会生效
<context:component-scan base-package="java"/>
配置文件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:c="http://www.springframework.org/schema/c"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--注解支持-->
<context:annotation-config/>
<context:component-scan base-package="java"/>
</beans>
1.@Component:(创建bean)
在实体类加标签@Component就相当于在配置文件中创建了一个bean,beanid为类名小写
package pojo;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class User {
private String name = "张三";
}
测试类测试一下:
@Test
public void Component(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user", User.class);
System.out.println(user.toString());
}
发现真的可以取到User的bean:user
2.@Value:可以直接给实体类中的属性赋值(属性注入)
package pojo;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class User {
@Value("张三")
private String name;
}
@Value相当于在xml中的
<property name="name" value="张三"/>
3.@Component的衍生注解
在web开发中,会按照mvc三层架构分层
- dao:@Repository
- service:@Service
- controller:@Controller
这四个注解功能一样,都代表将某个类注册到Spring容器中,然后装配bean
4.自动装配配置
@Autowired
@Resource
5.作用域:
@Scope(“prototype”):使bean为原型模式
@Scope(“singleton”):使bean 为单例模式