spring:使用注解开发
1、@Component、@Controller、@Service、@Repository
这三个注解去除掉了原生xml文件中bean标签的书写
@controller、@Service、@Repository这三个注解是@component的衍生注解。
作用是一样的,用这三个能很好的区分出这个类是属于表现层
、业务层
还是数据层
的类。
名称 | @Component/@Controller/@Service/@Repository |
---|---|
类型 | 类注解 |
位置 | 类定义上方 |
作用 | 设置该类为spring管理的bean |
属性 | value(默认):定义bean的id |
这几个注解后面可以有内容如:
@Component
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
@Component("bookDao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ..." );
}
}
//运行类。在App类中,从IOC容器中获取BookServiceImpl对应的bean对象,打印
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
System.out.println(bookDao);
//按类型获取bean
BookService bookService = ctx.getBean(BookService.class);
System.out.println(bookService);//运行成功了,内容就不展示啦
}
}
**总结:
1、BookServiceImpl类没有起名称,所以在App中是按照类型来获取bean对象
2、@Component注解如果不起名称,会有一个默认值就是当前类名首字母小写
,所以也可以按照名称获取,如
BookService bookService = (BookService)ctx.getBean("bookServiceImpl");
System.out.println(bookService);