spring 注解方式创建对象以及属性注入
注解介绍
- 代码里面的特素标记,使用注解可以完成功能
- 注解写法 @注解名称(属性名称=“属性值”)
- 注解使用在类、方法、属性上面
注解开发准备
1.导入jar
2.创建类,创建方法
3.创建spring配置文件,引入新的约束
<?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">
</beans>
4.开启注解扫描
<!-- 开启注解:扫描到包里扫描类、方法、属性上面是否有注释
-->
<context:component-scan base-package="cn.itcast.anno"></context:component-scan>
<!-- 只扫描属性上面的注解 -->
<context:annotation-config></context:annotation-config>
注解创建对象
1.需要被创建的类
package cn.itcast.anno;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component(value = "user") //相当于<bean id="user" class="cn.itcast.anno.User"/>
@Scope(value = "prototype") //多实例,视情况而定
public class User {
public void add(){
System.out.println("add...");
}
}
2.配置文件
<?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"></context:component-scan>
<!-- 只扫描属性上面的注解 -->
<context:annotation-config></context:annotation-config>
</beans>
3.测试类及方法
package cn.itcast.anno;
import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAnno {
@Test
public void testUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
User user = (User) context.getBean("user");
System.out.println(user);
user.add();
}
}
注解注入属性之resource注入(常用)
1.创建service类,dao类,在service中得到dao对象
package cn.itcast.anno;
import org.springframework.stereotype.Component;
@Component(value = "userDao")
public class UserDao {
public void add(){
System.out.println("userDao...");
}
}
package cn.itcast.anno;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component(value = "userService")
public class UserService {
//得到UserDao对象
//1.定义UserDao类型属性
//在UserDao的属性上使用注解 完成对象注入
@Resource(name = "userDao")
private UserDao userDao;
//使用注解方式不需要set方法
public void add(){
System.out.println("userSerice...");
userDao.add();
}
}
2.创建配置文件
<?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"></context:component-scan>
<!-- 只扫描属性上面的注解 -->
<context:annotation-config></context:annotation-config>
</beans>
3.测试类及方法
package cn.itcast.anno;
import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAnno {
@Test
public void testUserService() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = (UserService) context.getBean("userService");
System.out.println(userService);
userService.add();
}
}
注解注入属性之 @Autowired
只需把类中的@resource注解换成@Autowired
package cn.itcast.anno;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component(value = "userService")
public class UserService {
//得到UserDao对象
//1.定义UserDao类型属性
//在UserDao的属性上使用注解 完成对象注入
@Autowired
private UserDao userDao;
//使用注解方式不需要set方法
public void add(){
System.out.println("userSerice...");
userDao.add();
}
}
配置文件和注解混合使用
- 创建对象使用配置文件
- 注入属性使用注解方式实现
1.创建类
package cn.itcast.xmlanno;
public class BookDao {
public void book(){
System.out.println("book...");
}
}
package cn.itcast.xmlanno;
public class OrdersDao {
public void buy(){
System.out.println("ordersDao...");
}
}
package cn.itcast.xmlanno;
import javax.annotation.Resource;
public class BookService {
//得到bookDao和odersDao对象
@Resource(name = "bookDao")
private BookDao bookDao;
@Resource(name = "ordersDao")
private OrdersDao ordersDao;
public void add(){
System.out.println("bookService...");
bookDao.book();
ordersDao.buy();
}
}
2.创建配置文件
<?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"></context:component-scan>
<!-- 配置对象 -->
<bean id="bookService" class="cn.itcast.xmlanno.BookService"></bean>
<bean id="bookDao" class="cn.itcast.xmlanno.BookDao"></bean>
<bean id="ordersDao" class="cn.itcast.xmlanno.OrdersDao"></bean>
</beans>
测试类及方法
package cn.itcast.anno;
import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAnno {
@Test
public void testBookService() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
BookService bookService = (BookService) context.getBean("bookService");
System.out.println(bookService);
bookService.add();
}
}
注解创建对象与属性总结
创建对象的四个注解
@Component //通用
@Controller //web层中使用
@Service //业务层
@Repository //持久层
创建属性的两个注解
1.使用 @Autowired 注解进行自动装配,不需要指定要注入的对象的value值,自动的根据类名去寻找对应的类来创建对象并进行对象属性的注入。
2.使用 @Resource(name=”userDao”),需要指定需要创建的对象的名字,这里的name对应@Component注解中的value的值,使用这个注解能够根据我们所指定的对象名准确创建出我们所需要的对象。