基于注解方式创建对象:
第一步:引入依赖的jar包(使用maven后只需要再pom中写依赖的jar包坐标即可。)
第二步:配置文件中开启注解扫描:
注意,(1)如果扫描多个包,多个包之间使用逗号隔开.
(2)如果包层目录写到半路,表示扫描当前包下所有目录。
组件扫描的细节配置(可以精确控制哪些需要扫描,哪些排除):
1.因为已经指定use-default-filters="false"不使用默认的filters,默认filters为全部的注解包括了@Controller、@Service等,所以默认情况下只要没有显示指定为不使用默认的filers.context:component-scan base-package指定的扫描器都会对相应的注解进行扫描。因此可以说use-default-filters="false"属性是专门和context:include-filter子标签一起使用,这样可以更加自由地指定哪些注解由扫描器扫描。其意思相当于:只扫描@xxx注解的标志的类。
2.如果不写use-default-filters属性的话,默认扫描所有,然后可以再用exclude设置哪些注解不需要扫描。
第三步:编写类(类上使用注解):
注意:
@Service注解是标注在实现类上的,因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的
service接口:
package com.fan.service;
import org.springframework.stereotype.Service;
//此类只是掩饰注解方式创建类的对象
/*
在注解里面value属性可以省略不写,
默认其等号右边的值是首字母小写的类名称
UserService-->userService
* */
public interface UserService {
public void add();
}
service的实现类:
package com.fan.service.impl;
import com.fan.dao.UserDao;
import com.fan.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(value = "userServiceImplx")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void add() {
System.out.println("service的add方法");
//userDao.add();//调用接口的方法
}
}
第四步:测试,获取对象
package testspring.java;
import com.fan.service.UserService;
import com.fan.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestBean {
@Test
public void test01(){
//加载配置文件
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("spring2.xml");
/*通过配置文件获取对象,(可以认为类上有了注解,就相当于在xml定义了bean,
然后bean的id类上注解后的value的值。
我们就可以根据bean的id,即注解上的value值来获取该类的一个对象)*/
UserService userService = context.getBean("userServiceImplx", UserService.class);
userService.add();
}
}
利用注解获取类的对象的理解:
out目录存放的是该项目下所有Module(模块)的编译结果。
target目录存放的是单个Module的编译结果。
如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。
你在Project Structure中的Project选项卡中可以设置Project compiler output的目录。
在Modules中选择某一个模块后,在右侧的Paths选项卡中可以设置该模块的Compiler output目录。
基于注解方式实现属性注入:
(1)@Autowired:根据属性类型进行自动装配
(2)@Qualifier:根据属性名称进行注入(Qualifier和上面的Autowired必须一起使用)
代码:
@Autowired
@Qualifier(value = “userDaoImpl”)//根据名称进行注入
private UserDao userDao;(3)@Resurce:可以根据类型注入,也可以根据名称注入。(@Resurce是tomcat自带的注解)
用法一:@Resource//单独写一个@Resource,是根据类型进行注入
private UserDao userDao;
用法二://容器内注入dao
@Resource(name = “userDao”)//根据类上面的 @Repository(“userDao”) userDao的 名称进行注入
private UserDao userDao;(4)@Value:注入普通类型属性
@Value(“张三”)//功能和对象.setName(“张三”)一样
private String name;
总结:不包含maven的spring缺点很多,特别是jar包需要自己手动导入,特别麻烦,还可能产生冲突。比如之前项目导入jar。是通过copy方式导入项目中,而且还会存在jar之间的依赖和冲突。而maven解决了这些问题,不再需要来回复制jar包了,解放了我们的双手。