IoC详解

IoC详解

1. Spring的一些衍生注解

注解 描述
@Component 将修饰的资源交给Spring管理.value属性:为资源命名(唯一标识)
@Controller 衍生注解,与@Component作用和属性相同,特用于修饰标识层的资源.
@Service 衍生注解,与@Component作用和属性相同,特用于修饰业务逻辑层的资源
@Repository 衍生注解,与@Component作用和属性相同,特用于修饰数据访问层的资源
  • 这四个注解修饰的类,我们通常称为注册bean.目的是将某类的实例对象,添加到spring容器中

1.2 依赖注入(DI)

注解 描述 修饰位置
@Resource(name="") 按照指定名称注入对象 字段\setter方法
@Resource 按照类型注入对象 字段\setter方法
@Value 注入简单值 字段、setter方法、参数
@PropertySource 加载properties配置文件

1.2.1 按照名称注入

  • dao

    @Repository("dao1")
    public class UserDao {
    }
    
  • service

@Service("service1")
public class UserService{
	//name对应UserDao
	@Resource(name="dao1")
	private UserDao userDao;
}

1.2.2 按照类型注入

  • dao

    @Repository
    public class  UserDao {
    }
    
  • service

    @Service("service1")
    public class UserService{
    	//对应UserDao
    	@Resource()
    	private UserDao userDao;
    }
    

    1.2.3 普通数据注入

  • 固定值注入

    public class SpringConfigruation {
    
    	@Value("com.mysql.jdbc.Driver")
    	private String driver;
    	
    	@Value("jdbc:mysql://127.0.0.1:3306/crm_ssm_v1_0")
    	public void setUrl(String url){
    		System.out.println("字段:" + driver);
    		System.out.println("方法:" + url);
    	}
    }
    

    测试:(使用的是JUnit测试)

    扫描二维码关注公众号,回复: 4484864 查看本文章
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes={SpringConfigruation.class})
    public class UserDaoTest {
    	
    	@Test
    	public void testFindAll() throws SQLException{
    	}
    }
    

    1.2.4 properties数据注入

  • 配置类
    使用@PropertySource加载properties配置文件

    "classpath"是固定前缀,表示从类路径下加载配置文件.

    @Value(${jdbc.driver}) 获得配置文件中指定key的内容

    默认:将整个表达式进行注入,及 driver变量的值是 ${jdbc.driver}

    固定代码:必须配置PropertySourcesPlaceholderConfigurer实例。

    • jdbc.properties配置文件(这是连接数据库所需配置)
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/test1
    jdbc.username=root
    jdbc.password=root
    
    • 配置类
    @PropertySource(value={"classpath:jdbc.properties"})
    Public class SpringConfigruation2{
        
        @Bean 
    	public static PropertySourcesPlaceholderConfigurer propertyPlaceholder(){
    		return new PropertySourcesPlaceholderConfigurer();
    	}
    }
    
  • service类进行测试

@Service("service1")
public class UserService{
	//对应UserDao
	@Resource()
	private UserDao userDao;
    @Value("${jdbc.username}")
	private String username;
    public void save() {
		System.out.println("配置类用户名"+username);
	}
}

2. @Bean(工厂Bean)

通过@Component 等注解,将我们自己编写的对象配置到spring容器中。

通过@Resource等注解,将我们自己编写的对象之间的关系配置到spring容器中。

实际开发中,我们常需要整合第三方对象(组件)。在spring中提供@Bean来实现。

2.1 基本使用:类型注入

  • 配置类
public class SpringConfigruation3 {
	//@Bean用于修饰方法,将方法创建的对象添加到spring容器
    @Bean
	public UserDao userDao(){
		return new UserDao();
	}
}

  • 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SpringConfigruation3.class})
public class UserDaoTest {
	
	@Autowired
	private UserDao userDao;

	@Test
	public void testFindAll() throws SQLException{
		System.out.println(userDao);
	}
}

3.Bean的作用域

注解 描述 取值
@Scope 用于设置Bean的作用域,也就是通知spring是否每次都创建新对象 singleton:默认值,单例 prototype:多例
  • 其他取值(了解)
  1. request:在WEB项目中.Spring创建一个Bean对象将对象存入到request域中

  2. session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中

  3. globalSession :WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session

    3.1 实例Bean

实例Bean有两个注解,来控制类中哪个方法是初始化方法,哪个方法是销毁方法

注解 描述
@PostConstruct 初始化方法,项目启动时执行,只会被调用一次
@PreDestroy 销毁方法,项目关闭时执行,只会被调用一次

3.2工厂Bean

工厂Bean通过@Bean的两个属性完成初始化和销毁的配置

initMethod:配置初始化方法

destroyMethod:配置销毁方法

例如:

@Bean(initMethod="",destroyMethod="")

猜你喜欢

转载自blog.csdn.net/qq_41250414/article/details/84949982