Spring IOC容器 (注解实现)
概述
目的:使用注解的方式是为了简化XML的书写
准备:要使用注解先开启组件扫描
<!--在XML文件中添加如下配置
对应包下的所有类将会被扫描 多个路径可以用 ","隔开
-->
<context:component-scan base-package="包路径"></context:component-scan>
//或者使用Java类创建 (完全注解开发)
@Configuration
@ComponentScan("com.wds") //包路径
public class SpringConfig {
}
//加载配置
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Spring为Bean管理创建对象提供的注解
注意 :注解的value属性类比bean标签的ID属性 不写属性的话默认为首字母小写的类名
这几个注解的功能相同
使用时建议对应类的功能使用不同的注解
- @Component
- @Service
- @Controller
- @Repository
@Component :这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。Spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
@Service :此注解是组件注解的特化。它不会对@Component 注解提供任何其他行为。您可以在服务层类中使用@Service 而不是@Component,因为它以更好的方式指定了意图。
@Controller :这将一个类标记为 SpringWeb MVC 控制器。标有它的Bean 会自动导入到 I
oC 容器中。
@Repository :这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。
Spring为Bean管理属性注入提供的注解
tips:在属性上添加属性注入的注解后会自动生成set方法 可以不写set方法
@Autowired
根据类型注入
@Qualifier (value=“bean_id”)
根据属性名注入 要和@Autowired一起使用( 单一类型无法确定单一对象时)
@Resouce 不建议使用
可以根据类型注入也可以根据属性名注入 (1 + 2 的结合) 但是这个注解并不是Spring提供的 并不推荐使用
@Value (“字符串”)
普通字符串注入
属性注入示例:
@Service
public class UserServiceImpl implements UserService {
// @Autowired
// @Qualifier
// @Resource(type = UserDaoImpl.class)
@Resource(name = "userDaoImpl")
private UserDao dao;
@Value("文本内容")
private String text;
@Override
public void addUser(User user) {
dao.add();
System.out.println( "service add()...");
System.out.println(user);
}
}