spring 注解配置bean2
来源:互联网 发布:dvd播放软件 tn 编辑:程序博客网 时间:2024/06/06 02:00
1.UserService类
package com.hxzy.annotation.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.hxzy.annotation.repository.UserRepository;
//模拟业务层,服务层
@Service
public class UserService {
//autowired可以放在构造器上、属性上、有参数的方法上,以下是将autowired放在属性上
@Autowired
// @Qualifier("userRepositoryImpl") //此处使用Qualifier时,需要修改Test类中的ctx.getBean()中的参数
private UserRepository userRepository;
//autowired放在set方法上(set方法有参数)
// @Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void add() {
System.out.println("UserService add...");
userRepository.save();
}
}
2.UserRepositoryImpl类
package com.hxzy.annotation.repository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.hxzy.annotation.TestObject;
//模拟持久化层 //此处的参数("userRepository")如果不写,则接口实现类为两个时(UserRepositoryImpl、 UserJdbcRepository)
//会提示如下错误:.UserRepository] is defined: expected single matching bean but found 2: userJdbcRepository,userRepositoryImpl
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository {
//如果TestObject类中缺少@Component声明,则此处即便使用AutoWired,也会出现BeanCreationException异常
//如果在TestObject类中无@Component声明,此处可以在Autowired中添加参数required=false,使得testObject不被调用,这样就不会报出异常了。
@Autowired(required=false)
private TestObject testObject;
@Override
public void save() {
System.out.println("UserRepository save...");
System.out.println(testObject);
}
}
3.UserJdbcRepository 类
package com.hxzy.annotation.repository;
public class UserJdbcRepository implements UserRepository {
@Override
public void save() {
System.out.println("UserJdbcRepository save");
}
}
4.UserRepository 接口
package com.hxzy.annotation.repository;
public interface UserRepository {
void save();
}
5.UserController 类
package com.hxzy.annotation.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.hxzy.annotation.service.UserService;
//模拟表现层
@Controller
public class UserController {
//使用注解建立bean与bean之间的引用关系
@Autowired
private UserService userService;
public void execute() {
System.out.println("UserController execute...");
userService.add();
}
}
6.bean配置文件(基本没用上)
<?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.0.xsd">
<!-- 指定spring ioc容器扫描的包,
指定 base-package(基目录) 后,清理工程,则 com.hxzy.annotation包中的所有类被自动扫描,并带有标示s。接口类除外
指定 resource-pattern ,表示指定扫描的文件为com.hxzy.annotation下repository目录中的所有class文件 -->
<!--
<context:component-scan
base-package="com.hxzy.annotation"
resource-pattern="repository/*.class">
</context:component-scan>
-->
<!--context:exclude-filter : 不包含的包 -->
<!--
<context:component-scan
base-package="com.hxzy.annotation">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
-->
<context:component-scan
base-package="com.hxzy.annotation"
use-default-filters="true"
>
<!-- 只包含指定的包,配置好后,运行无效,需要加use-default-filters="false"
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Repository"/>
-->
<!-- 使用全类名的方式指定可使用类 ,此时仅UserRepository类可用 属性use-default-filters=""可不使用 ,若使用需要将值改为false -->
<context:include-filter type="assignable" expression="com.hxzy.annotation.repository.UserRepository"/>
<!-- 使用全类名方式指定不可使用类,此时仅UserRepository类不可用,注意要删除 use-default-filters="false"
<context:exclude-filter type="assignable" expression="com.hxzy.annotation.repository.UserRepository"/>
-->
</context:component-scan>
</beans>
7.测试类
package com.hxzy.annotation;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
import com.hxzy.annotation.controller.UserController;
import com.hxzy.annotation.repository.UserRepository;
import com.hxzy.annotation.service.UserService;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("annotation.xml");
//使用spring 的默认命名策略,testObject对象是基于TestObject类,将TestObject类的首字母小写,作为bean对象,不在配置文件中专门配置bean
// TestObject to = (TestObject) ctx.getBean("testObject");
// System.out.println(to);
//
// //UserController类的首字母小写,作为bean对象
UserController userControl = (UserController) ctx.getBean("userController");
userControl.execute();
System.out.println(userControl);
//
// UserService userService = (UserService) ctx.getBean("userService");
// System.out.println(userService);
//在UserRepository类中注解若使用@Repository("userRepository"),则此处的ctx.getBean()中参数与注解中的参数相同
//否则若UserRepository类中注解若使用@Repository, 此处ctx.getBean("userRepositoryImpl")
UserRepository userRepository = (UserRepository) ctx.getBean("userRepository");
System.out.println(userRepository);
ctx.close();
}
}
- spring 注解配置bean2
- spring注解配置
- Spring注解配置
- spring mvc注解配置
- Spring IoC 注解配置
- Spring注解版配置
- spring 注解配置
- 注解方式配置spring
- spring注解配置
- Spring的注解配置
- Spring AOP注解配置
- spring注解扫描配置
- spring注解配置详解
- Spring注解事务配置
- Spring AOP 注解配置
- Spring MVC 注解配置
- spring 注解配置定时器
- Spring -- 注解配置Bean
- 广播域和冲突域
- 中国大学MOOC-陈越、何钦铭-数据结构 Root of AVL Tree
- Windows高精度计时
- [BZOJ1218] [HNOI2003]激光炸弹
- leetcode31
- spring 注解配置bean2
- Binary Tree Paths
- ZOJ.3131 Digital Clock【打表】 2015/10/11
- Collections结合Comparator实现对列表的快速排序
- 17.1.1.7 Setting Up Replication with New Master and Slaves
- 使用swfupload进行异步文件上传(java版)
- ZOJ 3903 Ant(公式)
- hdu 5463 Clarke and minecraft(水)
- 抽奖系统