1.创建Bean对象的注解
<1>配置自定义Bean对象注解
@Component、@Controller、@Service、@repository
用法:写在类上,
例如:@Service 或者 @Service(“userService”)
作用:将该类交给Spring创建对象保存到Spring容器中,如果没有指定名称,类名首字母小写就是默认名称。
<2> 配置第三方Bean对象注解
@Bean
用法:写在配置类方法上。
例如: @Bean 或者 @Bean(“dataSource”)
作用:将方法的返回值对象保存到Spring容器,如果没有指定名称,方法名首字母小写就是默认名称。
2.依赖注入的注解
<1>注入对象类型数据
@Autowired
用法:写在成员变量/set方法/构造方法/方法参数列表中
作用:按照类型自动装配对象,如果同类型对象有多个,默认按照变量名和Bean的名称匹配,推荐使用@Qualifier指定要匹配的Bean的名称。
@Qualifier(""):指定要匹配的Bean的名称,要和@Autowired配合一起使用,不能单独使用。
<2>注入普通类型数据
<2>注入普通类型数据
@Value(""):注入普通类型数据,支持EL表达式
3.-1-和-2-两者代码示例
import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service("userService")
public class UserServiceImpl implements UserService {@Value("20")private String num;@Autowired//本质是将容器中的对象直接赋值[前提:容器中要先添加该bean对象]//放到成员变量 底层:暴力反射//放到构造方法 可用//放到set方法 可用//方法参数列表中 可用@Qualifier("userDao")//当UserDao有两个同类型的属性,用此注解指定idprivate UserDao userDao;@Overridepublic void save() {System.out.println("UserServiceImpl save is running..."+num);userDao.save();}
}
4.初始化和销毁方法的注解
@Repository("userDao")
public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("dao中的save方法执行了...");}@PostConstruct//初始化方法注解public void init(){System.out.println("init初始化..........");}@PreDestroy//销毁方法注解public void destroy(){System.out.println("destroy销毁..........");}
}
5.测试-3-和-4-实例测试类
@Testpublic void test1(){//需求:从spring容器中获取userService对象,并调用save方法//1 创建spring容器对象ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");//2 从spring容器中获取userService对象//UserService userService = (UserService) ac.getBean("userService");//UserService userService = ac.getBean(UserService.class);UserService userService = ac.getBean("userService", UserService.class);//3 调用save方法userService.save();}打印结果:
-------------------------------------------------------
init初始化..........
UserServiceImpl save is running...20
dao中的save方法执行了...
注:由于destroy销毁方法即执行方法时jvm已经关闭,所以未打印;需要打印则接收类要换成ClassPathXmlApplicationContext,使用里面的close()方法关闭