一、什么是注解?
可以从下面三个维度理解注解:
- 代码里的特殊标记,使用注解可以完成一些功能
- 注解写法:@注解名称(属性名称=属性值)
- 注解可以使用在类上面、方法上面以及属性上面
二、使用注解创建对象
创建对象时可以使用下面注解:
- @Component
- @Controller,常用与Web层
- @Service,常用于业务层
- @Repository,常用与持久层
目前来讲,这四个注解功能都是一样的,都是创建对象。
可以使用下面这个注解来设置类创建的对象是单例的还是实例的:
- @Scope(value=“prototype”)
下面用一个具体的例子来讲一下Spring是如何通过注解来创建对象的。
1)创建类
@Component(value="user")
public class User{
public void add(){
System.outt.println("add...");
}
}
2)创建配置文件并引入约束
在前面博客的例子中,由于只用到了IOC基本功能,因此只需要引入beans约束;这个例子中,由于需要引入IOC的注解功能,需要另外引入context约束。
<?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.xsd">
<!--开启注解扫描-->
<context:component-scan base-package="cn.itcast.anno">
</beans>
3)测试
public class testAnno{
@Test
public void testUser(){
ApplicationContext context = ClassPathXmlApplicationContext("bean1.xml");
User user = (User) context.getBean("user");
user.add();
}
}
三、使用注解注入属性
场景:创建service类、创建dao类,在service中的得到dao对象
@Component(value="userDao")
public class UserDao{
public void add(){
System.out.println("dao...");
}
}
@Component(value="userService")
public class UserService{
@Resource //@Autowired
private UserDao userDao;
public void add(){
System.out.println("service...");
System.out.println(userDao.add());
}
}
四、配置文件方式和注解方式混合使用
- 创建对象操作通常使用配置文件的方式来实现
- 注入属性的操作通常使用注解的方式来实现
1)创建类
public class OrderDao{
public void buy(){
System.out.println("ordersdao...");
}
}
public class BookDao{
public void book(){
System.out.println("bookdao...");
}
}
public class BookService{
@Resource(name="bookDao")
private BookDao bookDao;
@Resource(name="ordersDao")
private OrdersDao ordersDao;
public void add(){
System.out.println("service...");
ordersDao.buy();
bookDao.book();
}
}
2)配置文件
<!--开启注解扫描-->
<context:component-scan base-package="cn.itcast.anno">
<!--配置对象-->
<bean id="bookService" class="cn.itcast.xmlanno.BookServicec"></bean>
<bean id="orderDao" class="cn.itcast.xmlanno.OrderDao"></bean>
<bean id="bookDao" class="cn.itcast.xmlanno.BookDao"></bean>