范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Spring注解编程

  Spring多文件配置处理
  通配符方式# 非web环境 ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext-*.xml");  # web环境    	contextConfigLocation 		classpath:applicationContext-*.xml import标签# applicationContext.xml 整合其他配置内容     ...# 非web环境 ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");  # web环境    	contextConfigLocation 		classpath:applicationContext.xml 接口的契约性
  注解的契约性
  Spring的基础注解
  在Spring框架应用注解时,如果对注解配置的内容不满意,可以通过Spring配置文件进行覆盖。对象创建相关注解
  》》》搭建开发环境 
  》》》对象相关注解
  1)@Component : 替换原有Spring配置文件中bean标签显示指定工厂创建对象的id值:@Component("u");
  Spring配置文件覆盖注解配置内容:
  2)@Component 的衍生注解以下三种注解能更加准确的表达一个类型的作用
  @Repository ===》XXXDAO
  @Service ===》XXXService
  @Controller
  注意:①本质上这些衍生注解就是@Component,作用、细节、用法完全一致
  ②Spring整合MyBatis开发过程中,不使用@Repository、@Component,原因是DAO的对象是动态代理创建的
  3)@Scope : 控制简单对象创建次数
  注意:不添加@Scope Spring提供默认值singleton
  4) @Lazy :延迟创建单实例对象
  注意:使用@Lazy注解后,Spring使用这个对象的时候,才会进行对象的创建
  5)生命周期相关注解
  注入相关注解
  》》》@Autowired ===> 用户自定义类型
  ① @Autowired基于类型进行注入:注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)===> 推荐
  ② @Autowired @Qualifier 基于名字进行注入
  ③ @Autowired放置位置
  a) 放置在对应成员变量的set方法上
  b) 放置在成员变量之上,Spring通过反射直接对成员变量进行注入(赋值)===> 推荐
  ④JavaEE规范中类似功能的注解
  JSR250 @Resource(name="userDAOImpl")基于名字进行注入
  @Autowired()
  @Qualifier("userDAOImpl")
  注意:如果在应用Resource注解时,名字没有配对成功,那么会继续按照类型进行注入
  JSR330 @Inject作用 @Autowired完全一致 基于类型进行注入 ===> EJB3.0   javax.inject   javax.inject   1 
  》》》JDK类型
  1)@Value注解①不能应用在静态成员变量上,否则赋值(注入)失败
  ②该注解+Properties这种方式,不能注入集合类型,YMAL/YML配置方式替代
  2)@PropertySource
  注解扫描# 当前包及其子包 
  》》》排除方式
  》》》包含方式
  注解开发的思考
  》》》配置互通
  》》》注解和配置文件使用的条件程序员自己开发的类型,可以加入对应的注解,进行对象创建。
  非程序员开发的类型,需要配置文件(bean标签来完成)进行配置。(如:SqlSessionFactoryBean、MapperScannerConfigure)SSM半注解DAO(Spring + MyBatis)
  Service
  ControllerSpring的高级注解配置Bean
  @Configuration实际上是@Component的衍生注解
  》》》配置日志
  基于注解开发,不能集成log4j, 发现没有日志打印
  基于注解开发,集成的是logback    org.slf4j   slf4j-api   1.7.25      org.slf4j   jcl-over-slf4j   1.7.25      ch.qos.logback   logback-classic   1.2.3      ch.qos.logback   logback-core   1.2.3      org.logback-extensions   logback-ext-spring   0.1.4  <?xml version="1.0" encoding="UTF-8" ?>                  					             %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n                                   AnnotationConfigApplicationContext
  @Bean注解
  等同于XML配置文件中bean标签
  》》》对象的创建简单对象:直接通过new方式创建的对象
  复杂对象:不能通过new方式创建的对象(如:Connection, SqlSessionFactory)
  package com.demo;  import com.demo.bean.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;  @Configuration public class AppConfig {      /**      * 简单对象      * @return      */     @Bean     public User user() {         return new User();     }      /**      * 复杂对象(推荐使用)      *     Connection不能直接通过new创建      * @return      */     @Bean     public Connection conn() {         Connection conn = null;         try {             Class.forName("com.mysql.cj.jdbc.Driver");             conn = DriverManager.getConnection("jdbc:mysql://192.168.XXX.222:3306/ssm_db?useSSL=false", "root", "root");         } catch (ClassNotFoundException e) {             e.printStackTrace();         } catch (SQLException throwables) {             throwables.printStackTrace();         }          return conn;     } }package com.demo.bean;  import org.springframework.beans.factory.FactoryBean;  import java.sql.Connection; import java.sql.DriverManager;  public class ConnectionFactoryBean implements FactoryBean {      @Override     public Connection getObject() throws Exception {         Class.forName("com.mysql.cj.jdbc.Driver");         Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.XXX.222:3306/ssm_db?useSSL=false", "root", "root");          return conn;     }      @Override     public Class<?> getObjectType() {         return Connection.class;     }      @Override     public boolean isSingleton() {         return false;     } }/**      *  遗留系统使用该方式创建      *      很少自己写ConnectionFactoryBean,来创建复杂对象      * @return      */ @Bean public Connection conn() {     Connection conn = null;     try {         ConnectionFactoryBean factoryBean = new ConnectionFactoryBean();         conn = factoryBean.getObject();     } catch (Exception e) {         e.printStackTrace();     }      return conn; }
  》》》自定义id值
  @Bean("id")
  》》》控制对象创建次数@Bean
  @Scope("singleton|prototype") 默认值singleton@Bean注解的注入
  》》》用户自定义注入package com.demo;  import com.demo.injection.UserDAO; import com.demo.injection.UserDAOImpl; import com.demo.injection.UserService; import com.demo.injection.UserServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class AppConfig {     @Bean     public UserDAO userDAO() {         return new UserDAOImpl();     }      @Bean     public UserService userService(UserDAO userDAO) {         UserServiceImpl userService = new UserServiceImpl();         userService.setUserDAO(userDAO);          return userService;     } }package com.demo;  import com.demo.injection.UserDAO; import com.demo.injection.UserDAOImpl; import com.demo.injection.UserService; import com.demo.injection.UserServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class AppConfig {     @Bean     public UserDAO userDAO() {         return new UserDAOImpl();     }    	// 简化写法(没有把userDAO作为形参传入)     @Bean     public UserService userService() {         UserServiceImpl userService = new UserServiceImpl();         userService.setUserDAO(userDAO());          return userService;     } }
  》》》JDK类型注入@Bean public Customer customer() {     Customer customer = new Customer();     // 硬代码 耦合     customer.setId(1);     customer.setName("zhangsan");      return customer; }package com.demo;  import com.demo.bean.Customer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource;  /**  *  读取配置文件init.properties,解决耦合问题 */ @Configuration @PropertySource("classpath:init.properties") public class AppConfig {          @Value("${id}")     private Integer id;     @Value("${name}")     private String name;      @Bean     public Customer customer() {         Customer customer = new Customer();         customer.setId(id);         customer.setName(name);          return customer;     } } @ComponentScan注解@ComponentScan等同于XML配置文件中的标签
  目的:扫描注解 (如:@Component、@Value、@Autowired ...)
  》》》排除、包含的使用
  1)排除
  2)包含
  Spring多种配置方式
  》》》配置优先级配置文件bean标签 > @Bean > @Component及其衍生注解
  优先级高的配置 覆盖 优先级低的配置
  配置的优先级能解决耦合问题
  ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig4.class, AppConfig5.class);  ApplicationContext ctx = new AnnotationConfigApplicationContext("com.demo.config");多个配置信息
  》》》多配置信息整合
  ① 多个配置Bean的整合
  1) base-package进行多个配置Bean的整合
  2) @Import
  1. 可以创建对象
  2. 多配置bean的整合
  3) 指定多个配置Bean的Class对象ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig1.class, AppConfig2.class,...);
  ② 配置Bean与@Component相关注解的整合
  ③ 配置Bean与Spring XML配置文件的整合
  跨配置的注入
  配置Bean底层实现原理
  Spring在配置Bean中加入了@Configuration注解后,底层就会通过CGlib的代理方式,来进行对象相关的配置、处理四维一体的开发思想
  基于schema
  基于特定功能注解 ===> 推荐
  基于原始      
  基于@Bean注解 ===> 推荐package com.demo;  import org.springframework.context.annotation.*; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource;  @Configuration @ComponentScan(basePackages = "com.demo") public class AppConfig {      @Bean     public PropertySourcesPlaceholderConfigurer configurer() {         PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();         configurer.setLocation(new ClassPathResource("init.properties"));          return configurer;     } }纯注解版AOP编程
  package com.demo.aop;  public interface UserService {     void register();     void login(); }package com.demo.aop;  import org.springframework.stereotype.Service;  @Service public class UserServiceImpl implements UserService {     @Override     public void register() {         System.out.println("UserServiceImpl.register");     }      @Override     public void login() {         System.out.println("UserServiceImpl.login");     } }package com.demo.aop;  import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component;  @Aspect @Component public class MyAspect {      @Pointcut("execution(* com.demo.aop..*.*(..))")     public void pointCut() {}      @Around("pointCut()")     public Object arroud(ProceedingJoinPoint joinPoint) throws Throwable {          System.out.println("-------Log-----------");          Object proceed = joinPoint.proceed();          return proceed;     } }package com.demo.aop;  import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy;  @Configuration @ComponentScan(basePackages = "com.demo.aop") @EnableAspectJAutoProxy public class AOPConfig { }
  》》》注解AOP细节分析Spring AOP 代理 默认:JDK
  SpringBoot AOP 代理默认:CGlib
  纯注解版Spring+MyBatis整合基础配置(配置Bean)
  package com.demo.mybatis;  import com.alibaba.druid.pool.DruidDataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver;  import javax.sql.DataSource; import java.io.IOException;  @Configuration @ComponentScan(basePackages = "com.demo.mybatis") @MapperScan(basePackages = "com.demo.mybatis") public class MyBatisAutoConfiguration {      @Bean     public DataSource dataSource() {         DruidDataSource dataSource = new DruidDataSource();         dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");         dataSource.setUrl("jdbc:mysql://192.168.30.222:3306/ssm_db");         dataSource.setUsername("root");         dataSource.setPassword("root");          return dataSource;     }      @Bean     public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {         SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();          sqlSessionFactoryBean.setDataSource(dataSource);         sqlSessionFactoryBean.setTypeAliasesPackage("com.demo.mybatis"); //        sqlSessionFactoryBean.setMapperLocations(new ClassPathResource("UserDAOMapper.xml"));         try {             ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();             Resource[] resources = resolver.getResources("com/demo/mapper/*Mapper.xml");             sqlSessionFactoryBean.setMapperLocations(resources);         } catch (IOException e) {             e.printStackTrace();         }          return sqlSessionFactoryBean;     } }配置Bean耦合问题mybatis.driverClassName=com.mysql.cj.jdbc.Driver mybatis.url=jdbc:mysql://192.168.XXX.222:3306/ssm_db mybatis.username=root mybatis.password=root mybatis.typeAliasesPackages=com.demo.mybatis mybatis.mapperLocations=com/demo/mapper/*Mapper.xmlpackage com.demo.mybatis;  import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component;  @Data @Component @PropertySource("classpath:mybatis.properties") public class MybatisProperties {     @Value("${mybatis.driverClassName}")     private String driverClassName;     @Value("${mybatis.url}")     private String url;     @Value("${mybatis.username}")     private String username;     @Value("${mybatis.password}")     private String password;     @Value("${mybatis.typeAliasesPackages}")     private String typeAliasesPackages;     @Value("${mybatis.mapperLocations}")     private String mapperLocations; }package com.demo.mybatis;  import com.alibaba.druid.pool.DruidDataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver;  import javax.sql.DataSource; import java.io.IOException;  @Configuration @ComponentScan(basePackages = "com.demo.mybatis") @MapperScan(basePackages = "com.demo.mybatis") public class MyBatisAutoConfiguration {      @Autowired     private MybatisProperties mybatisProperties;      @Bean     public DataSource dataSource() {         DruidDataSource dataSource = new DruidDataSource();         dataSource.setDriverClassName(mybatisProperties.getDriverClassName());         dataSource.setUrl(mybatisProperties.getUrl());         dataSource.setUsername(mybatisProperties.getUsername());         dataSource.setPassword(mybatisProperties.getPassword());          return dataSource;     }      @Bean     public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {         SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();          sqlSessionFactoryBean.setDataSource(dataSource);         sqlSessionFactoryBean.setTypeAliasesPackage(mybatisProperties.getTypeAliasesPackages()); //        sqlSessionFactoryBean.setMapperLocations(new ClassPathResource("UserDAOMapper.xml"));         try {             ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();             Resource[] resources = resolver.getResources(mybatisProperties.getMapperLocations());             sqlSessionFactoryBean.setMapperLocations(resources);         } catch (IOException e) {             e.printStackTrace();         }          return sqlSessionFactoryBean;     } }纯注解版事务编程
  package com.demo.mybatis;  public interface UserService {     void register(User user); }package com.demo.mybatis;  import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;  @Data @Service @Transactional public class UserServiceImpl implements UserService {      @Autowired     private UserDAO userDAO;      @Override     public void register(User user) {         userDAO.save(user);     } }package com.demo.mybatis;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement;  import javax.sql.DataSource;  @Configuration @EnableTransactionManagement public class TransactionAutoConfiguration {      @Autowired     private DataSource dataSource;      @Bean     public DataSourceTransactionManager dataSourceTransactionManager() {         DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();         dataSourceTransactionManager.setDataSource(dataSource);          return dataSourceTransactionManager;     } }Spring中YAML/YML使用
  YML语法
  Spring与YML集成
     org.yaml   snakeyaml   2.0 
  》》》init.ymlaccount:   name: zhangsan   password: rootpackage com.demo.yml;  import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  @Data @Component public class Account {     @Value("${account.name")     private String name;     @Value("${account.password}")     private String password; }package com.demo.yml;  import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource;  import java.util.Properties;  @Configuration @ComponentScan(basePackages = "com.demo.yml") public class YmlAutoConfiguration {      @Bean     public PropertySourcesPlaceholderConfigurer configurer() {         YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();         yamlPropertiesFactoryBean.setResources(new ClassPathResource("init.yml"));         Properties properties = yamlPropertiesFactoryBean.getObject();          PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();         configurer.setProperties(properties);          return configurer;     } }Spring与YML集成问题
  》》》init.ymlaccount:   name: zhangsan   password: root list: 111,222package com.demo.yml;  import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  import java.util.List;  @Data @Component public class Account {     @Value("${account.name")     private String name;     @Value("${account.password}")     private String password;     @Value("#{"${list}".split(",")}")     private List list; }

斯托伊奇科夫为什么被终身禁赛?保加利亚球星斯托伊奇科夫是足坛一位极具争议的球员,他脾气暴躁,一言不合就干架,爱发牢骚,爱斗气,经常被红牌罚下。素有有足坛坏小子狂人之称。他又被中国媒体称之为霹雳火。天赋与脾气19孩子逐渐长大,什么时间分床睡,什么时间分房睡为好?孩子大了自然就不想和父母睡了,感觉没有什么一定几岁之前要分床睡!孩子小对父母有依赖很正常,干嘛要把他推开!很不理解有的家长要一定分床,一定要给孩子送到住宿学校培养什么独立自主,孩子媳妇怀孕每天要吐七八次,吐的她都不想生孩子了怎么办?这个我特别有发言权,我就是那个孕期吐到胆汁都出来的人,两胎都一样,我也是疯了,怀第一个吐的都不行了,怀孕6个月,体重103斤,孕前115斤笑哭什么都不能吃,在家就抱着个盆,走哪儿都小孩子总是说看到鬼,晚上就非常害怕一个人睡觉,这可怎么办啊?你家小孩晚上非常害怕一个人睡觉,是因为他先天元气很足,但是先天禀性弱,体质差,阴气太重,阳气不足。那么应该怎么办呢?第一要加强锻炼,提高身体素质,远离疾病。身体素质好了,阳气旺盛了夫妻有一人是2型糖尿病,会遗传给孩子吗?夫妻有一人是2型糖尿病,会遗传给孩子吗?如果夫妻双方中有一人是二型糖尿病,最有可能被遗传的是另一方,因为两个人的生活习惯,饮食结构,面对问题,当地的环境都是几乎一样的,再这样的环境孩子几岁的时候可以自己睡?小学5年级了,还和家长一起睡,你们能理解吗?不知道你们家宝贝儿是啥时开始分房睡成功的?最近接孩子,分别和2位家长聊起这事儿,真是让我惊掉下巴。其中一个是同班女娃,平常看着挺自立的,在你生孩子的时候,关于亲妈和婆婆都有什么故事?我孩子刚出生,自己亲妈就提出要求,要我们母子分离,婆婆却在第一时间,站了出来,当着我跟老公的面,跟我妈就差点打了起来,最后婆婆霸气的一句话,让我跟吃了蜜一般,心里开心的不行在我跟老中长款的牛仔半身裙怎么搭配才好看?真的有那么显瘦吗?hello,各位小仙女,我是小时尚Fad。中长款的牛仔裙有点类似于包臀裙的版型,款式虽然简单但是却不乏小心机,稍微在搭配上花费一点小心思就可以惊艳众人。LOOK1牛仔裙纯色修身上衣该冷不冷,难成年景!冬至将至,北方明显偏暖,不是好事吗?该冷不冷,难成年景!冬至将至,北方明显偏暖!今年冬至是在月中会是暖冬吗?专家不是好事!再有5天就到冬至了,一年当中最重要的节气,有冬至大如年的说法。在古代这一天像过年一样,给家人弄想问所有的退休人员,你们有退休证吗?退休后发一本退休证,这是延续了过去的什么都得有个证的观念。比如粮本,副食本,独生子女证,结婚证(还有),离婚证,出生证,学生证,教师证,军官证,残疾证,驾驶证,警官证,等等。有的有保时捷992s和4s怎么选?CarreraS和Carrera4S抛开价格因素,它们的主要区别如下1驱动方式不同这也是两者之家最主要的区别,S使用的是后置后驱的驱动方式,而4S使用的是后置四驱和全时四驱的驱动方
性能美学新标杆,七彩虹CVNB760MFROZENWIFID5战列舰主板评测前言Intel早在9月份就发布了13代酷睿处理器和Z790主板,不过Z系列主板一直定位高端,且售价相对较高,更多是超频玩家的首选。而Intel在CES2023上还发布了13代非K系茅台上了头的泛美化之路2022年12月30日12月31日,茅台集团2023年市场工作会在海南茅台度假村举行,会议的主要任务是全面盘点去年,科学谋划来年。这是茅台史上波及范围最广规模最大的市场会议,总的来Redmi12C只要699元!员工入门机天花板设计天花板今日消息,小米集团张宇指出,Redmi12C是入门机天花板设计天花板,这款新品售价是699元。该机拥有四款青春蓬勃的生机配色,包括暗影黑深海蓝薄荷绿和熏衣紫,背部是极简纹理的防滑设千里防线崩溃,第一次跨过鸭绿江的日军山县有朋中华地大物博,物产丰富,一直是他国想要的富饶土地。今天的中华人民有能力守护祖国。可是在一百多年前的清朝末年时期,面对列强的强取豪夺,软弱无能的清政府毫无抵抗能力。清朝疆域图而除了西黑龙江肇东市冬捕节开幕千米大网拉出万斤鱼游客在购买冬捕的鱼。肇东市委宣传部提供中新网绥化1月10日电(记者王妮娜)1月10日,2022黑龙江冷水鱼冬捕季肇东市大似海第九届渔猎冬捕文化节盛装开幕,国内数百名游客齐聚肇东市,新春走基层南涧樱花经济赋能乡村振兴无量山樱花谷美如画隆冬时节,大理白族自治州南涧彝族自治县无量山樱花谷花开灿烂,繁樱绚丽,满谷皆春,为人们送来冬日里的第一缕芬芳。这里是中国春天最早到达的地方最佳网红打卡地最佳爱情表听侦探们放歌,何炅张若昀领衔大侦探8新春演唱会以演唱会的形式开启全新的探秘破解之旅,备受关注的推理综艺大侦探8官宣定档,并将在1月12日1月13日两天连播节目的新春演唱会,晚会嘉宾阵容及演唱会节目单也同时公布。据悉,何炅张若昀年终奖到账怎么投?春节特供理财减少银行主打安全短期春节将至,大家的年终奖陆续到账,理财需求旺盛,各大银行开门红仍在紧锣密鼓地推进。不过,记者走访发现,现在银行对于节前理财的推荐呈现两个趋势一是力推大额存单结构性存款等保本理财二是相苹果称iOS16。3Beta2修复了AppleMusic脏标问题IT之家1月12日消息,苹果表示近期发布的iOS16。3Beta2(内部版本号20D5035i)修复了AppleMusic脏标(explicit)的问题。这个问题最早可以追溯到去年入住3年后终于明白地暖和暖气片哪种更好?很多人搞错了想要温暖过冬,除了开空调之外,还有另外几种选择,比如地暖或者暖气片。不过现在年轻人家里一般都选择地暖,而老一辈会选择暖气片,那么地暖和暖气片到底哪一种保暖性更好,性价比更高呢?我最开年第一单丨小面店一天成交5000多元小订单里有大讲究视频加载中(央视财经第一时间)喧闹的街巷响亮的叫卖,扑面而来的是复苏的气息。开年以来,各地抢单团陆续出海,行程满满。一次握手签约,是彼此许久的默契。开年以来,各地民生小店重启开张,